美文网首页
SAS学习笔记1

SAS学习笔记1

作者: 飘乐云 | 来源:发表于2019-11-30 21:22 被阅读0次

    2.5-2.9

    数据读取方式:List input, Column input, Formatted input, Mix input

    List input(列表输入、自由格式输入):适合原始数据文件中所有值之间都被至少一个空格分隔开。局限性:你必须读取一条记录中的全部数据,不能跳过不需要的值,任何缺失值都必须用句点标识;字符型数据不能有内嵌的空格,长度不超过8个字符;包括日期或其他需要特殊处理的数据,不适合。  input Name $ Age Height;

     Column input(列输入):适于读取数据文件所有值或表示缺失值的句点之间没有空格(或其他分隔符)的文件,所有值都是字符型或标准数值型。优势:①值之间无须空格;②缺失值可以留空;③字符数据可以内嵌空格(没说数值型可以内嵌空格,估计是不可以吧);④可以跳过不需要的变量。调查数据非常适合列输入进行读取数据。                                                                                      input Name $ 1-10 Age 11-13  Height 14-18;*1-10表示该变量的列范围;

    Formatted input(格式化输入 ):最复杂,可以读取诸如日期的特殊数据。 input Name $10.  Age 3.  Height 5.1 Birthdate MMDDYY10.  Acreage COMMA9.  ;

    Mix input(混合输入):结合实际同时灵活应用以上三种方式。    input Name $1-22 State $  Acreage COMMA9.  ;


    输出格式:字符,数值,日期

    字符:Name  $w. Name是名称,w是总长度,  $表示是字符型。例如:Wang $10.

    数值:Name  w.d   Name是名称,w是总长度, d是小数位数,例如:Heigh 5.1    Age 3.

    日期:Name  w.  例如:Birthdate MMDDYY10.

    +1表示跳过一列。

    常用输入格式


    2.10读取混杂的原始数据

    The @‘character’column pointer(列指针)和The colon modifier(冒号修饰符)   和 @n  

         指将指针移到到特定的列,@40 指移到到第40列,@‘Breed:’指某种信息总出现在单词Breed之后,指针移到单词Breed之后。

     input @'Breed:' DogBreed$; *狗品种信息总出现在单词Breed之后,$表示此为字符变量;

     (在变量名长度超过8个字符时可 ,需为字符变量制定输入格式) 

     input @'Breed:' DogBreed$20.;*$20.     SAS连续读取20个字符,无论其中是否含有空格;

      input @'Breed:' DogBreed:$20.;*:$20.  SAS读取到空格或数据行结束为止(最多读取20个字符);


    2.11 为每个观测值读取多行原始数据

    行指针:斜线(/)和#n。

    指示跳到下一个原始数据行; #n 指跳到指定的行,即第n行。  

     input city $ state $

                 / NormalH  NormalL

              #3 RecordH RecordL; */告诉SAS在读NormalH 和 NormalL前转到第二行第一列,#n3指转到第三行第一列;

    2.12 为每行原始数据读取多个观测值:

    Line-hold specifier(行固定标识符):@@

    如果每行原始数据有多个观测,可以在input语句结尾处使用@@。 使用了@@,SAS不会为每个观测自动进入原始数据的新一行。

                                         input city $ state $ NormalRain  MeanDaysRain @@;


    2.13 读取原始文件的一部分

    用@结束input语句,告诉SAS,保留那行原始数据。然后可用IF语句来判断是否是你需要保留的观测数据,如果是,则使用第二个input语句读取变量数据。

    input Type $ @;

    if Type='surface' Then delete;

    input Name $ 9-38 AmTraffic PMTraffic;

    2.13 在infile语句中使用选项控制输入

    (1)“FFIRSTOBS=  ”告知SAS从第几行开始读取数据。 infile 'C:\Mylib\Allscore.dat' FIRSTOBS=3;

    (2)“OBS= ”   告知SAS在哪一行时停止读取。      infile 'C:\Mylib\Allscore.dat' FIRSTOBS=3  obs=5;

    (3)"MISSOVER"告知SAS,当一行数据读完的时候不要转到下一行,而是为其余变量分配缺失值。

                               infile 'C:\Mylib\Allscore.dat' MISSOVER; 

     而默认情况下,当SAS读完一行数据后,如果input语句中还有一些变量没有赋值,SAS将转到下一个数据行读取数据。

    (4)“TRUNCOVER”告知SAS为变量读取数据,直到遇到了数据行的结尾,或者遇到了在格式或列范围指定的最后一列,二者以先遇到为准。在默认情况下,如果一个变量的字段超出了数据行的结尾,SAS将转到下一行继续读取数据。(数据行结束指实际数据行结束了,变量字段长度是预先设定的变量作用域)

                           infile 'C:\Mylib\Allscore.dat' TRUNCOVER;

     如果数据行在变量作用域开始前就结束了,"MISSOVER" 和  “TRUNCOVER”都会为变量分配缺失值;但如果数据行在变量作用域中间结束时,“TRUNCOVER”将尽量读取可用数据,"MISSOVER" 则直接为变量分配缺失值。

    (5)“DELIMITER”“DLM=”选项能够读取其他分隔符的文件。(列表输入可以读取用空格分隔的数据) 。如果分隔符是字符串,用“DLMSTR=”。                                                             

                      infile'C:\Mylib\Allscore.dat'  DLM=',' ; infile 'C:\Mylib\Allscore.dat'  DLM='&' ;

                      infile 'C:\Mylib\Allscore.dat'  DLMSTR='ABC' ;

                     infile 'C:\Mylib\Allscore.dat'  DLM='09'X ;*使用制表符作为分隔符;

    (6)“DSD”它忽略用引号括起来的数据值中的分隔符;不会把引号作为数值的一部分读取;把两个连续的分隔符视为缺失值。                                                                                    

                    infile 'file-specification' DLM='09'XDSD;*读取一个制表符分隔的ASCII文件;

    CSV文件,用逗号作为分隔符,可以用“DSD”选项读取,连续的逗号表示缺失值;如果数据值包含逗号,则数值会被放在引号中。infile 'C:\Mylib\Bands.csv' DLM=',' DSD;

    相关文章

      网友评论

          本文标题:SAS学习笔记1

          本文链接:https://www.haomeiwen.com/subject/ofrawctx.html