【SAS BASE】通过DATA步导入数据注意事项(适用于text、ASCII、sequential、flat文件)
- (从内部导入)Datelines一定是DATA Step的最后一个语句,除非SAS遇到分号,所有datelines后面的语句都被看作是数据:
1 DATA A; 2 INPUT a $ b $ c; 3 datalines; 4 adams F 12 5 Lincon M 16 6 ; 7 RUN;
- (从外部导入)Infile语句紧跟在DATA语句后面,但一定要在INPUT语句前面:
1 DATA B; 2 INFILE 'C:\MYRAWDATA\B.dat'; 3 INPUT a $ b$ c; 4 RUN;
- LRECL=option:处理Long records 的办法,record length指的是每一行数据的包括空格在内的字符数,SAS假定是256,若数据较长,则SAS可能读不完所有的数据:
1 INFILE 'C:\DATA\b.dat' LRECL=2000;
- @n:column pointer命令SAS移动到第n列,注意在INPUT语句中一定要放在变量名之前
1 INPUT a $ 1-22 b $ Year @40 acre comma9.; 2 /*表示在读入acre数据之前,SAS移动到第40列*/
- @'character':即跟在某个特定的单词或字母(character)后面
1 INPUT @ 'bread:' Dogbreed $;
- colunm modifier:命令SAS遇到空格就停下来
1 INPUT @'bread:' Dogbreed $;/*输出:Rottweil(默认长度为8)*/ 2 3 INPUT @'bread:' Dogbreed $20.;/*输出:Rottweil vet bill*/ 4 5 INPUT @'bread:' Dogbreed :$20.;/*输出:Rottweil(遇到空格停止)*/
- 读入数据小工具(/,#n,@@,@):
/:令SAS跳到SAS的下一行读入;
#n:令SAS跳到SAS的第n行读入;
@@:若数据中出现了一行有多个观测值时,应在INPUT语句最后加上@@;
@: 命令SAS停留在这里,用户可通过IF语句判断这一行到底该不该读入,若需要,则SAS才会继续读入该行的其他变量,若不需要,后面的INPUT语句就不会执行:
1 INPUT TYPE $ @; 2 IF TYPE ='surface' THEN DELETE; 3 INPUT NAME $ 9-27 C D;
- MISSOVER:命令SAS如果该行数据读完了,不要读下一行数据,剩下的未读变量全部赋值为缺失值;
TRUNCOVER:适用于采用column或formatted input 方法,且某些数据行比其他行要短的情形。它命令SAS仅当遇到数据行的末端或者在format or column输入指定的最后一列时才停止输入。
/*MISSOVER与TRUNCOVER的相似与区别*/
若数据在读入该变量之前就终止,则MISSOVER与TRUNCOVER都会赋予该变量缺失值;
若数据在读入该变量中间就终止(比如定义3-12,到第六列就完了),则MISSOVER会赋予该变量缺失值;TRUNCOVER则会有多少分配多少 - DLM:指定读入文件的分隔符。注意,若分隔符是tab,则需要用DLM='09'X(IBM中为'05'X);若分隔符为字符串,则用DLMSTR=option选项。
- DSD option:功能
1 默认分隔符是逗号,若不是,用DLM=更改; 2 数据中的引号不读入; 3 引号内的分隔符不被读入; 4 连续中两个连续的分隔符看作是缺失值。
善良而平凡地生活,努力而智慧地学习