1:libref必须小于等于8个字符,以字母或下划线开始,只能包括字母,下划线和数字。
2:sas数据集的列名默认用变量的label,如果没有label就用变量名替代。
3:sas假定外部文件的record lenght只有256The record length is the number of characters, including spaces, in a data line.《一条观测的长度,包括一条观测值的所有变量以及空格的长度》
use the LRECL= option in the INFILE statement to specify a record length
INFILE ’c:\MyRawData\President.dat’ LRECL=2000;
4:sas中input的变量名必须小于等于32个字节
5:SAS will go to the next data line to read more data if there are more variables in the INPUT statement than there are values in the data line.
6:sas只会读取字符型变量的8前八位,如果你需要读取更多,可以自己设定length选项或读取是用 :$20. 冒号是关键, :告诉sas要么把规定的长度读完,要么读到相应的分隔符就停止
7:sas有按列方式读取,有list方式读取数据,还有格式方式读取数据,$informatw. informatw.d informatw. 一般date用格式读取方式较多,三种格式可以混合使用。使用@n 可以将指针移动到到第n列读取数据,使用@‘char‘可以读取char后面的字符。
8:一条观测值读取多行数据
DATA highlow; INPUT City $ State $ / NormalHigh NormalLow #3 RecordHigh RecordLow; */表示读取下一行 #n表示读取第n行; datalines; Nome AK 55 44 88 29 Miami FL 90 75 97 65 Raleigh NC 88 68 105 50 ; RUN;
9:一行数据读取到多条观测值
DATA highlow; INPUT City $ State $ NormalHigh NormalLow @@; *@@表示一条观测值读取完毕后不换行继续读取下一条观测值; cards; Nome AK 2.5 15 Miami FL 6.75 18 Raleigh NC . 12 ; RUN;
8:运动单@尾符读取部分数据
DATA highlow; INPUT type $ @; *单@会一直保持一行读取,除非data步结束,或者另一个input语句不是以@结束; IF type ne ‘surface‘ then delete; INPUT Stree $ 9-38 maxV minV; CARDS; freeway 408 3684 3459 surface Martin Luther King Jr. Blvd. 1590 1234 surface Broadway 1259 1290 surface Rodeo Dr. 1890 2067 freeway 608 4583 3860 freeway 808 2386 2518 surface Lake Shore Dr. 1590 1234 surface Pennsylvania Ave. 1259 1290 ; RUN;
9:You need the TRUNCOVER option when you are reading data using column or formatted input and some data lines are shorter than others
missover和truncover的区别,对于一行结束时有缺省,如果是按列方式读取,(就是规定了列的数量)missover会把最后一个变量也置为缺失,而truncover会把缺失部分截除掉。
图上面的数据集是truncover的结果
10:dsd和dlm的作用(重要)
dlm是dlimiter的意思,用来表示文件的分隔符,对于常用的csv文件用dlm=‘,‘;对用tab分隔符,如果电脑编码是ASCII则用dlm=‘09‘x;如果编码为EBCDIC则用dlm=‘05‘X;
dsd是Delimiter Sensitive data的意思,对于infile文件他有三个作用
1:忽视引号内的分隔符
2:当读取带引号的字符串时,不把引号内读作数据的一部分
3:将两个连续的分隔符当做缺失值处理
11:PROC IMPORT过程。
import过程会预先扫描20行来判断变量对应的类型,并且会根据你的文件后缀来判断你的分隔符,如果是.csv则会用‘,‘,.txt则用‘09‘X,其他的需要自己声明。
会忽略引号,并将两个连续分隔符当做缺失值处理。实现dsd dlm missover的大部分功能。
PROC IMPORT DATAFILE=‘D:\truncO.csv‘ OUT=Temp REPLACE;GETNAMES=NO;RUN;
REPLACE会将输出数据集替代原有的数据集。
GETNAMES=NO; 是不把第一行当做列名。
DATAROWS = n;是规定从第几行开始读取
GUESSINGROWS = n; 是改变默认扫面的行数
sas相关限制及选项的含义