SAS中两个语句可以完成相同操作,应该如何选择?

现在有一个记录联系方式的数据集contact,其中有一条观测的地址信息(Address)缺失。
253086-1.png
现在想把地址缺失的观测删除,可以有两种做法:
(1)使用IF语句和DELETE语句来删除满足条件的观测,其基本形式如下:
IF 条件表达式 THEN DELETE;
在该过程中,SAS首先判断条件表达式是否为真。如果为真,则执行THEN从句中的DELTET语句。DELETE语句会让SAS立即返回DATA步的开始处读取下一条观测,当前观测不会写入输出数据集中。注意,DELETE语句不会删除输入数据集中的观测。
data work.contact_address;
  set saslib.contact;
  if address = "" then delete;
run;
(2)另一种方式是直接选取满足条件的观测,即使用取子集的IF语句(Subsetting IF),其基本形式如下:
IF 条件表达式;
当条件表达式的值为真时,继续处理该观测;否则停止处理该观测并返回DATA步开始处读取下一条观测,且该观测不会写入输出数据集。该IF语句称为选取子集的IF语句,是因为所产生的输出数据集是原始数据集的子集。
data work.cwork.contact_address;
set saslib.contact;
if address ^= "";
run;
当DELETE语句和取子集的IF语句都可以完成相同的操作时,选择哪种方式呢?主要依据如下:
由于DELETE语句和取子集的IF语句需要构造的条件表达式不同,因此在编写程序的时候,通常选择需要较少比较次数的条件表达式的语句,因为这会提高程序执行效率。
在比较次数相近时,通常选择正向的条件表达式,也就是说选择取子集的IF语句。
当数据中存在缺失值或可能有拼写错误的数据值时,使用取子集的IF语句也更容易产生需要的结果。









请前往:http://www.mark-to-win.com/TeacherV2.html?id=166