【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:MYRAWDATAB.dat';
3     INPUT a $ b$ c;
4 RUN;
  • LRECL=option:处理Long records 的办法,record length指的是每一行数据的包括空格在内的字符数,SAS假定是256,若数据较长,则SAS可能读不完所有的数据:
1 INFILE 'C:DATA.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 连续中两个连续的分隔符看作是缺失值。
原文地址:https://www.cnblogs.com/chenyn68/p/3865096.html