您的位置:首页 > 其它

"The SAS Little Bookl" reading note (Part II)

2008-06-02 18:00 429 查看
 
[align=center]将数据读入SAS的方式[/align]
直接将数据录入SAS——DATA Step / Viewtable
将原始数据文件读入SAS ——DATA Step / PROC IMPORT
将其他形式文件导入成SAS ——PROC IMPORT /
直接读入其他形式文件
[align=center]Telling SAS Where to Find Your Raw Data[/align]
1.       Internal raw data
Datalines or Cards 命令
2.External Raw data files
Infile 命令 + Input 命令
1. Long records
在一些操作环境,SAS假定外部文件的纪录对最长为256(一行数据包括空格等所有字符在内的长度),如果预计读入的纪录长度超过256,可在Infile语句中使用LRECL=n 这个命令。

[align=center]读入以空格作为分隔符的原始数据[/align]
如果原始数据的不同变量之间是以至少一个空格作为分隔符的,那可以直接采用List方法将这些数据读入SAS。
List Input读数据非常方便,但也有很多局限性:
(1)       不能跳过数据;
(2)       所有的缺失值必须以点代替
(3)       字符型数据必须是不包含空格的,且长度不能超过8;
(4)       不能直接读入日期型等特殊类型的数据。
程序举例:
INPUT Name $ Age Height;
 
[align=center]读入按列组织的数据[/align]
有些原始数据的变量之间没有空格或其他分隔符,因此这样的文件不能以List形式对入SAS。但若不同变量值的都在每条记录的固定位置处,则可以按照Column 形式读入数据。Colunm读数据方法要求所有的数据均为字符型或者标准的数值型(数值中仅包括数字,小数点,正负号,或者是E,不包括逗号或日期型数据)。
相对于List方法,Column读数据方法有如下优点:
(1)       变量值之间无需用空格分开;
(2)       可以空格表示缺失值;
(3)       字符型数据中可包括空格;
(4)       可跳过数据。
程序举例:
INPUT Name $ 1-10 Age 11-13 Height 14-18;
[align=center]使用格式命令读入非标准格式的数据[/align]
字符型数据: $informat w.
数值型数据:   informat w.d
日期型数据:   Datew.
(1)字符型:

$CHARw. :不删除前后空格,读入字符数据;
$HEXw. :将16进制的数据转化成字符数据;
$w.      :删除前面空格,读入字符数据;

(2)日期,时间或日期时间型数据
DATEw.           :以ddmmmyy或ddmmmyyyy形式读入日期;
DATETIMEw.  :以ddmmmyy hh:mm:ss.ss 形式读入日期时间;
DDMMYYw.     :以ddmmyy或ddmmyyyy读入日期;
JULIANw.        :以yyddd或yyyyddd读入Julia日期;
MMDDYYw.     :以mmddyy或mmddyyyy形式读入日期;
TIMEw.             :以hh:mm:ss.ss形式读入时间;

(3)数值型数据
COMMAw.d       :读入数值型数据,将其中的逗号,$ 删除,并将括号转化为负号
HEXw.                :将16进制数据转化成浮点型数据
IBw.d                  :读入整数二进制数据;
PERCENTw.     :将百分数转化为普通数据;
w.d                      :读入标准的数值型数据。
 
INPUT Name $16. Age 3. +1 Type $1. +1 Date MMDDYY10.
         (Score1 Score2 Score3 Score4 Score5) (4.1);

[align=center]多种输入格式综合[/align]
读入位置控制——列指针
+n –n :控制列指针从当前位置向前或向后移动n个字符;
@n   :控制列指针指向
举例:
INPUT ParkName $ 1-22 State $ Year @40 Acreage COMMA9.;
 
[align=center]读入杂乱数据[/align]
在不确定从哪一列开始读入数据,但知道读入的数据均位于某一特定字符或字符串之后时,可采用@’character’列指针。
如:有字符串如下,需读入Breed:后面的字符串
My dog Sam Breed: Rottweiler Vet Bills: $478
 
(1)SAS 语句:Input @’Breed: ’ DogBreed $;     读入内容: Rottweil
读入Breed:后面的字符串,赋给DogBreed,读入时到空格时,自动结束。
(2)SAS 语句:Input @’Breed:’ DogBreed $20.;   读入内容:Rottweiler Vet Bill
读入Breed: 后面的字符串,赋给DogBreed,读入字符串的长度为20。
(3)SAS语句:Input @’Breed:’ DogBreed :$20.;   读入内容:Rottweiler
      读入Breed: 后面的字符串,赋给DogBreed,读入字符串的长度为20,但遇到空格时不再继续读数据。
[align=center]从原始数据中读入多行数据作为SAS的一条观测[/align]
使用行指针:
‘ / ’—— 到下一行读数据
‘#n ’——到第n 行读数据
INPUT City $ State $ / NormalHigh NormalLow #3 RecordHigh RecordLow;
[align=center]从一行原始数据中读入多个观测[/align]
在Input语句末尾使用@@标示,告诉SAS继续读入本行后面的数据。
INPUT City $ State $ NormalRain MeanDaysRain @@;
[align=center]有选择的读入原始数据[/align]
SAS让用户无需读入所有的原始数据,然后再判断是否是用户所需要的数据。用户仅需先读入足够的变量,以判断该条观测是否为自己所需,然后在INPUT语句后以@结尾,以使SAS读数据的指针停在此处,保留此行数据。然后用户使用IF语句判断读入的观测是否为所需数据,若是,则使用第二个INPUT语句继续读入其余数据。
INPUT Type $ @;
   IF Type = ’surface’ THEN DELETE;
   INPUT Name $ 9-38 AMTraffic PMTraffic;
[align=center]@ & @@[/align]
(1)    均为锁定数据行的标示;
(2)    @标示在SAS进入下个循环之前就释放锁定的数据行,而@@标示在继续锁定数据行
[align=center]在INFILE语句中控制输入的选项[/align]
(1)FIRSTOBS=n : 从n条观测开始读入数据
(2)OBS=n 读入n条观测
(3)当读进内存的观测长度小于INPUT语句设定的长度时
当SAS指针到达一条记录的末尾,而在INPUT语句中尚有未读入的变量时,SAS默认继续读入下一行数据。
MISSOVER:不读入下一行数据,而将未赋值的变量以缺失值填充。
TRUNCOVER:当使用column或格式化读入方式时,某些数据行长度小于其他数据行长度时,使用TRUNCOVER选项,可防止SAS读入下一行
a871
数据。
[align=center]使用DATA步读入分隔符文件[/align]
在INFILE语句中使用DLM= 选项或者DSD选项可以读入以特定符号作为分隔符的原始文件。
(1)The DLM= option (i.e. DLM=’&’
如果是以Tab作为分隔符,则使用DLM=’09’X命令
(2)The DSD option:主要有三个功能
忽略单引号内的分隔符;
不将引号作为数据读入SAS;
将一行内连续两个单引号作为一个缺失值处理。
[align=center]使用IMPORT程序步读入分隔符文件[/align]
IMPORT 程序的功能
(1)       自动扫描数据文件,并确定变量的类型(数值型或字符型);
(2)       为字符型变量,自动设定变量的长度;
(3)       识别一些日期型数据;
(4)       将两个连续的分隔符作为一个缺失值读入SAS
(5)       读入引号内数据
(6)       自动将原始数据中不存在的变量赋缺失值;
PROC IMPORT DATAFILE=’filename’ OUT=data-set;
SAS根据读入文件的扩展名确定文件的类型。若读入文件没有正确的扩展名,或者是DLM文件,用户必须在IMPORT程序步中使用DBMS=option 选项。当读入数据集的名称已经存在于SAS库中,可用REPLACE选项将原数据覆盖。
PROC IMPORT DATAFILE=’filename’ OUT=data-set DBMS=identifier REPLACE;
在默认情况下,IMPORT程序步将第一行数据作为变量的名称。若第一行数据并非变量名,可在IMPORT语句后使用GETNAMES=NO语句。
若IMPORT程序读入的是分隔符文件,默认分隔符为空格。若不是,则需使用DILIMITER=statement语句指定分隔符。
PROC IMPORT DATAFILE=’filename’ OUT=data-set
                            DBMS=DLM REPLACE;
       GETNAMES=NO;
       DELIMITER=’delimiter-character’;
RUN;
[align=center]使用IMPORT程序步读入PC文件[/align]
PROC IMPORT DATAFILE=’filename’ OUT=data-set
       DBMS=identifier REPLACE;
[align=center]列示SAS数据集的内容[/align]
PROC CONTENTS DATA=data-set;
CONTENTS程序步的功能是显示SAS对数据集的具体描述,主要内容有:
(1)       数据集描述
               数据集的名称;
               观测的数量;
               变量的数量;
               创建日期
(2)       变量描述
               变量类型;
               变量长度;
               变量的输出格式;
               变更的输入格式;
              变量标识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息