使用LIST INPUT 来读入位置不固定的外部文件,如下所示:
1.LIST input格式
INPUT variable <$> :$符合表示字符,variable是读入的变量名;默认的数值和字符长度为8;可以使用length 语句为字符变量设置长度,避免长于 8个字符的字符数据被截断;
list input 需要数值与数值之间至少有一个空格或其他分隔符;
数值必须是从左往右读入遇到分隔符结束读取该数据放入对应变量中;遇到下一个非分隔符开始新的变量数据读入;但不像column input和formatted input 一样,不能重复读入数值;
如果是其他分隔符,需要在infile语句中加以使用DLM=“分隔符”选项;分隔符可以是引号引用的分隔符,也可以是字符变量。
举例如下:
上述list input 读入的逻辑是sas会扫描输入列,第1列开始左往右读入第一个数据直到遇到",",逗号标志该数据读入结束,放入PDV的第一个变量中。
variable可以是以序列形式存在;比如QES1-QES3;如果要给一串变量名加入格式的话,则该串变量名和格式比如用括号括起来,举例如下:
2.infile 语句选项 missover
如果input 行末有缺失值,在infile语句中加上missover,则SAS不会从下一行中读入数据来补上该行缺失。
举例如下:原数据
结果数据:
3.infile语句选项:DSD ,DLM="分隔符"
在infile语句中加入DSD选项,可以实现如下三个功能
a.默认分隔符为“,”
b.将连续两个分隔符视为缺失
c.将数据的引号剔除
如下所示:
如果不适用DSD选项,则连续两个分隔符视为1个,且不加missover会至下一行读取缺失的数值,读入完成即跳转至下一行从头开始读入:
举例如下:原数据:
如上所示,第二行数据的第一个值FEMALE用于填入第一行缺失的值,但是由于是字符格式不对视为缺失,且读入完成跳转至第三行,所以第二行数据FEMALE行则未读入。
4. list input语句中&和:的作用
list input 时在变量名后加&表示在数据中有1个空格时不会结束读取,实现读入空格,只有当连续两个空格时结束读入,因此在变量名后加&符,则该变量与其他变量间必须用两个空格分开;且在informat格式前使用。
list input时在变量名后加:支持读入非标准数据格式或者定义字符变量长度,遇到空格或其他分隔符的时候结束读入,按informat读入数据;
举例如下:
此处与formatted input 不一致的是:formatted必须设置宽度,commaw.d来指定读入的列数,次数只需要输入comma.来读入非标准数值,:表示遇到分隔符结束读入数据。
5.LIST PUT语句
使用PUT语句可以将SAS数据集输出至外部文件,与LIST INPUT 语句类似
PUT variable<:format>
variable表示变量名,:表示需要写入输出格式,format表示输出格式
举例如下:
LIST PUT的分隔符默认是空格,可以自定义输出外部文件的分隔符,在file语句中使用DLM="分隔符" ;也可以使用DSD选项,会将含有分隔符的数据加上引号
如下所示:
在PUT 语句中还可以直接将字符串和变量名一起写入外部文件,举例如下:
6.COLUMN INPUT\FORMATTED INPUT\LIST INPUT
在实际应用中,可以将上述三种输入类型根据数据情况结合起来使用,举例如下:
源数据: