sas条件判断语句where,if的区别,以及where选项

本文详细对比了SAS编程中where和if语句的功能及使用场景。where语句在数据加载前进行筛选,提高了CPU处理效率;if语句则在数据加载后进行条件判断。where适用于现有SAS数据集的筛选,而if语句更为灵活,可用于更复杂的条件判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:where和If最本质的区别,以及一些小的区别

1.1:The WHERE statement examines what is in the input page buffer and selects observations before they are loaded in the program data vector, which results in a savings in CPU operations(Where从buffer中进行筛选再读入pdv)

The subsetting IF statement loads all observations sequentially into the program data vector. If the statement finds a match and the statement is true, then the data is processed and is written to the output page buffer(If先读入pdv再进行筛选)

 

1.2:if可以从input的数据和sas数据集的数据中进行筛选,where只能筛选sas数据集的数据

if可以if语句的条件条件选择子句,where不能

 

 

where比if高效

if语句<可执行语句>

 IF statement tells SAS which observations to include, the DELETE statement tells SAS which observations to exclude

IF Sex = 'f';       IF Sex = 'm' THEN DELETE; 作用一样!

 

data b;
    set sashelp.class;
    if _n_ le 4;  *如果if为真,则继续执行if后面的语句,最后输出满足if的条件的观测,如果if为假则立刻返回到data步开头继续执行下一条set语句;
    y = 'now';
  /*
  y = 'now';
  if _n_ le 4;也能得出同样的结果,但是效率相对来说较低,因为要重复执行y的赋值语句
*/ run;

if的另外两种格式
if x=3 then y=4; 对于要表达的只有一条数据就用then
if x=3 then do y=4;z=5;end;  对于要表达的有多条语句就用then do end;


NOTE: 从数据集 SASHELP.CLASS. 读取了 19 个观测
NOTE: 数据集 WORK.B 有 4 个观测和 6 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
实际时间 0.03 秒
CPU 时间 0.03 秒                         日志中读入了19个观测,证明是全部读入再一个个判断是否满足条件

 where语句(where=选项)<不可执行语句>

 是在系统准备把观测读入pdv之前制定数据必须满足的一个条件。

WHERE where-expression-1<logical-operator where-expression-n>;

logical-operator can be AND, AND NOT, OR, or OR NOT

where表达式的算符:between and、is missing (is null)、contain (?)、like、same and、in

TIPS:

  1:where语句不能与自动变量连用以及新创建的变量连用,因为where语句在pdv之前执行

    2:使用where语句时,必须保证读入数据集的完整性,不能使用firstobs=2等不能完整读入数据集的选项

  3:当where选项与where语句同时作用于一个数据集的时候,系统只会考虑where选项,where选项可以只对某一个数据集起作用,而where语句是对所有的数据集起作用。

  4:当data步包含where语句和by语句时,where语句先于by语句之前被执行,by组对执行完毕后的数据集重新定义first/last变量。

  5:能用contains的地方都能用like、所以首先考虑用like。where x like a_b%; '_'表示正好有一个字符与之匹配,'%'表示可以替代任意多个字符

data a;
    input x y@@;
    cards;
    1 10 1 20 0 200 2 30 2 40
    3 50 3 60 4 70 3 80 4 400
    ;
run;

proc sort data=a;by x;run;
data b;
    set a;
    *where x ; *后面不添加条件是筛选x不为0和不为缺失值的数值型数据,只适用于数值型;
    where x is not missing; *筛选x不为缺失值的数据包括0,适用于数值型和字符型;
run;

proc print data=b noobs;

 where和if的最重要的几点区别

1:where不可执行、if可执行

2:where有自己特定的表达式,if是是通用表达式 例如where x is missing;

3:where只能从现有的sas数据集中选择观测,if语句还可以用input语句产生的观测中选择。*商用的一般都是现有的sas数据集;

4:where的效率比if高

5:何时使用if何时使用where?如果需要对pdv观测进行处理才能决定哪条观测,只能使用if。其余能使用where

转载于:https://www.cnblogs.com/yican/p/3809555.html

SAS提供了多种类型的判断语句,包括if语句条件语句if语句由条件组成,如果条件为真,则执行特定的操作。if语句后面可以跟随else语句,当布尔条件为假时执行相应的操作。此外,if语句还可以嵌套使用,即在if语句后面再跟一对if-then语句。在SAS中,if语句可以用于删除特定的观察值。例如,如果条件为真,则从数据集中删除特定的数据。 SAS的条件语句if-then的基本形式是:if 条件 then 执行;例如,如果年份小于2000,则执行删除操作。条件语句if-then可用于根据给定的条件执行单条语句if语句是用来进行条件判断的,其使用格式如下:if 要判断的条件:条件成立时要执行的操作;满足条件时执行的操作;不满足条件时执行的操作。if语句可以根据条件的不同执行不同的操作。在SAS中,通过if条件语句,可以根据具体的条件进行相应的数据处理操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SAS IF判断语句](https://blog.youkuaiyun.com/lvchunyang66/article/details/85773029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SAS 条件语句](https://blog.youkuaiyun.com/m0_51011378/article/details/121053381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [判断语句循环语句(基础篇三)](https://download.youkuaiyun.com/download/weixin_38621624/14856899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值