SAS 对部分观测得处理
在建立新数据集时,有以下两种方式可以从已经存在的数据集中选取观测到新数据集中。
·通过删除不满足条件的观测来保留想要的观测。
·仅接受满足条件的观测。
条件可以由IF语句、WHERE语句或数据集选项WHERE=中的条件表达式来指定。WHERE语句和数据集选项WHERE=可以用在DATA步 和PROC步中,两者的使用方法基本相同。
1.使用DELETE语句删除满足条件的观测
在DATA步中可以结合使用IF语句和DELETE语句来删除满足条件 的观测,其基本形式如下:
IF 条件表达式 THEN DELETE;
在该过程中,SAS首先判断条件表达式是否为真。如果为真,则执 行THEN从句中的DELTET语句。DELETE语句会让SAS立即返回DATA 步的开始处读取下一条观测,当前观测不会写入输出数据集中。注意, DELETE语句不会删除输入数据集中的观测。
在数据集saslib.contact中选取地址信息(Address)不为缺失 值的观测建立新数据集work.contact_address。
已经存在的数据集saslib.contact中包含客户联系信息,内容如图所示。
在DATA步中IF语句用于判断Address信息是否为缺失值,DELETE语句则可将Address为缺失值的观测删除。代码如下:
data work.contact_address; set saslib.contact; if address = "" then delete; run; proc print data=work.contact_address; run;
PRINT过程打印的数据集work.contact_address如图3.5所示。其中不 包含编号(Customer_ID)为C004的客户信息,因为其地址信息为缺失 值。
2.使用取子集的IF语句接受满足条件的观测
选择满足条件的观测另一种方式是直接选取满足条件的观测,即使 用取子集的IF语句(Subsetting IF),其基本形式如下:
IF 条件表达式;
当条件表达式的值为真时,继续处理该观测;否则停止处理该观测 并返回DATA步开始处读取下一条观测,且该观测不会写入输出数据 集。该IF语句称为选取子集的IF语句,是因为所产生的输出数据集是原 始数据集的子集。
选取数据集saslib.contact中其职位(Position)为Manager的 观测,建立新数据集work.contact_manager,并打印新生成的数据集中的数据。
代码如下:
data work.contact_manager; set saslib.contact; if position = "Manager"; run; proc print data=work.contact_manager noobs; run;
DELETE语句和取子集的IF语句得选择主要依据:
·由于DELETE语句和取子集的