일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Histogram
- 창평
- 우분투
- spss
- 신라
- repeated measures ANOVA
- ANOVA
- 후한서
- 통계
- categorical variable
- t test
- post hoc test
- 태그를 입력해 주세요.
- 선형회귀분석
- 고구려
- 통계학
- 한서지리지
- 기자조선
- 풍백
- 낙랑군
- 유주
- 한서
- 히스토그램
- 패수
- 단군
- 지리지
- 기자
- R
- linear regression
- 독사방여기요
- Today
- Total
獨斷論
SAS 문법 - 3 데이터 불러오기 본문
SAS에서는 데이터파일 안의 각 열이 어떻게 구분되냐에 따라
- column input
- list input
- formatted input
으로 구분한다.
Column input란 각 열의 크기를 숫자로 정해주어 변수에 지정하는 방법이고
List input이란 각 열이 공백으로 나누어져 있을때 데이터를 불러들이는 방법이고
Formatted input은 데이터 특별한 형식을 가지고 있을때 사용하는 방법이다.
Column input
데이터가 아래와 같을때
1024 Alice Smith 1 65 125
1167 Maryann White 1 68 140
1168 Thomas Jones 2 68 190
1201 Benedictine Arnold 2 68 190
1302 Felicia Ho 1 63 115
각 변수의 데이터가 몇번째 열까지인지 코드에 나타낸다.
data WgtHgt;
infile "d:\tmp\Col_Input.txt";
input subj 1-4 name $ 6-23 gender 25 height 27-28 weight 30-32;
run;
proc print data=WgtHgt;
run;
Column input은 데이터파일의 열을 반복해서 읽을수 있는 장점이 있다. 만약 이름의 첫번째문자를 따로 저장하고 싶다면 아래와 같이 6번째 열을 읽어서 init에 넣도록 하면 된다.
data WgtHgt;
infile "d:\tmp\Col_Input.txt";
input subj 1-4 init $ 6 name $ 6-23 gender 25 height 27-28 weight 30-32;
run;
proc print data=WgtHgt;
run;
List input
데이터 구분이 고정폭으로 주어지지 않고 각 변수의 데이터를 공백으로 구분한다. 따라서 문자열 변수의 경우 공백이 들어가서는 안되며 문자열의 길이는 8자를 넘지 못한다.
데이터 파일이 아래와 같을때
1024 AliceSmith 1 65 125
1167 MaryannWhite 1 68 140
1168 ThomasJones 2 68 190
1201 BenedictineArnold 2 68 190
1302 FeliciaHo 1 63 115
아래 SAS코드를 실행하면 name 변수가 8자 이상은 잘렸음을 알수 있다.
data WgtHgt;
infile "d:\tmp\list_Input.txt";
input subj name $ gender height weight;
run;
proc print data=WgtHgt;
run;
데이터 변수를 공백으로 구분하므로 missing value가 있을 경우 공백으로 그대로 두어서는 안되고 점( . )을 꼭 입력해야만 한다.
1024 AliceSmith 1 65 125
1167 . 1 68 140
1168 ThomasJones 2 68 190
1201 BenedictineArnold 2 . 190
1302 FeliciaHo 1 63 115
위 데이터를 가지고 아래 코드를 실행하면
data WgtHgt;
infile "d:\tmp\list_Input1.txt";
input subj name $ gender height weight;
run;
proc print data=WgtHgt;
run;
결측값이 제대로 입력되어 있지만 점( . )을 넣지 않고 그대로 공백으로 두면 데이터가 아래처럼 제대로 들어가지 않는다.
쉼표로 분리된 csv파일도 결측값이 있을때에는 점( . )을 꼭 넣어주어야만 한다.
1024,Alice Smith,1,65,125
1167,Maryann White,1,68,140
1168,.,2,.,190
1201,Benedictine Arnold,2,68,190
1302,Felicia Ho,1,63,115
위와 같이 Thomas Jones의 이름이 빠져있고 이사람의 키가 빠져있다면 꼭 점( . )을 넣어주어야만 한다.
data WgtHgt;
infile "d:\tmp\Commainput.csv" delimiter=",";
input subj name $ gender height weight;
run;
proc print data=WgtHgt;
run;
위 코드를 실행하면 각 변수마다 데이터가 제대로 들어가지만 만약 아래와 같이 결측값을 쉼표 사이에 그냥 둔다면 데이터를 제대로 불러들일수가 없다.
1024,Alice Smith,1,65,125
1167,Maryann White,1,68,140
1168,,2,,190
1201,Benedictine Arnold,2,68,190
1302,Felicia Ho,1,63,115
그러나 csv 파일에서 결측값을 점( . )으로 표시하지 않고 공백으로 표시한다면 결측값을 제대로 불러들일수가 있다.
1024,Alice Smith,1,65,125
1167,Maryann White,1,68,140
1168, ,2, ,190
1201,Benedictine Arnold,2,68,190
1302,Felicia Ho,1,63,115
data WgtHgt;
infile "d:\tmp\Commainput2.csv" delimiter=",";
input subj name $ gender height weight;
run;
proc print data=WgtHgt;
run;