SAS编程|if语句/where语句/select语句

        if语句和where语句是SAS中最常用的逻辑判断语句,主要用于数据筛选和条件赋值。当进行多分支的条件判断时,可以使用if...else语句来实现。如下:

if .<AGE<18 then AGEGR1N=1;
	else if 18<=AGE<=40 then AGEGR1N=2;
		else if 41<=AGE<=64 then AGEGR1N=3;
			else if 65<=AGE<=75 then AGEGR1N=4;
				else if AGE>75 then AGEGR1N=5;
AGEGR1=choosec(AGEGR1N,'18yr以下','18-40yr','41-64yr','65-75yr','75yr以上');

        理论上,else的语句可以无限长,囊括所有条件判断和操作,但如果条件判断过多,为了简化程序,可以使用select语句,其语法如下:

select;
    when(条件1) 操作语句1;
    when(条件2) 操作语句2;
    ...
    otherwise 操作语句n;
end;

         该语句的用途是根据某变量不同的值(值1,值2,…)进行不同的操作,最后以otherwise设定when语句没有包含的情况下的操作。可以用在计划外其他检查中存在有实验室检查指标的值时,例如:

data fa(where=(^missing(LBCAT)));
	format LBTEST LBTESTCD LBORRES LBSTRESU $200.;
	length LBTEST LBTESTCD LBORRES LBSTRESU $200.;

	set raw.fa(in=a rename=(FACLSIG=LBCS FACAT=LBCAT FAORRES=LBORRES FAORRESU=LBSTRESU FADESC=ADES));
	if a then do;
		select(FATEST);
		when('嗜酸细胞百分比') do;LBTEST='嗜酸细胞百分比'; LBTESTCD='EO'; end;
		when('RBC-M红细胞(高倍视野)') do;LBTEST='红细胞(高倍视野)'; LBTESTCD='URBC'; end;
		when('WBC-M白细胞(高倍视野)') do;LBTEST='白细胞(高倍视野)'; LBTESTCD='UWBC'; end;
      	when('高密度脂蛋白胆固醇') do;LBTEST='高密度脂蛋白胆固醇'; LBTESTCD='HDL'; end;
	  	when('天门冬氨基酸基转移酶') do;LBTEST='天门冬氨基酸基转移酶'; LBTESTCD='AST';end;
	  	when('丙氨酸氨基转移酶') do;LBTEST='丙氨酸氨基转移酶'; LBTESTCD='ALT'; end;
	  	when('γ-谷氨酰基转移酶') do;LBTEST='γ-谷氨酰基转移酶'; LBTESTCD='GGT'; end;
      	other LBCAT='';
    	end;
	end;
run;

        除了if语句和select语句,where语句也能达成类似的功能。需要注意的是,where语句只能用于数据筛选,而不能用于条件赋值。

        if语句是在PDV执行之后才执行,针对待处理数据进行筛选或赋值,而where语句是在PDV执行之前就已经被执行,当数据被读取至缓冲区的时候就已经被筛选完成。

        if与where在应用时的更多差别如下所示:

ifwhere
执行在PDV之后执行在PDV之前
在by语句之后执行在by语句之前执行
data步创建的变量可以在接下来的if语句中被使用data步创建的变量无法被where使用,因为where语句在变量创建前已经执行
执行速度比where慢执行速度更快,因为在待处理数据创建前已经筛选部分数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值