为何SAS执行指定代码后输出结果与预期不符?
问题原因
你的第二段SAS代码逻辑存在漏洞,导致输出不符合预期:
- 当
id_2不等于"zz"时,代码未设置任何过滤规则,SAS会默认保留这类观测(也就是所有xx、aa开头的行都会被保留下来) - 当
id_2等于"zz"时,仅age_2=23的观测会被保留,其余zz开头的行被过滤,但这部分逻辑只处理了zz的情况,完全没对其他id的行做限制
修正方案
最简单的方式是直接用复合条件做过滤:
data prova_2; set prova_2; if id_2="zz" and age_2=23; run;
如果一定要用do块实现,需要明确删除非zz的观测:
data prova_2; set prova_2; if id_2="zz" then do; if age_2=23; end; else delete; /* 主动删除所有非zz的观测 */ run;
内容的提问来源于stack exchange,提问作者Fabrizio Ferrari
相关产品推荐
相关产品推荐

