JMQ*_*JMQ 4 sas datastep recode
我有一个像这样的数据集(但有几百个变量):
id q1 g7 q3 b2 zz gl az tre
1 1 2 1 1 1 2 1 1
2 2 3 3 2 2 2 1 1
3 1 2 3 3 2 1 3 3
4 3 1 2 2 3 2 1 1
5 2 1 2 2 1 2 3 3
6 3 1 1 2 2 1 3 3
Run Code Online (Sandbox Code Playgroud)
我想保留ID,b2和tre,但是将其他所有内容都丢失了.在这个小的数据集中,我可以很容易地使用call missing (q1, g7, q3, zz, gl, az)- 但在一个包含更多变量的集合中,我实际上想说call missing (of _ALL_ *except ID, b2, tre*).
显然,SAS无法读懂我的想法.我考虑过涉及另一个数据步骤或proc sql的变通方法,我将原始变量复制到新的ds并将它们合并回post,但我正在尝试找到更优雅的解决方案.
此技术使用未执行的set语句(仅编译时间函数)来定义原始数据集中的所有变量.保持顺序和所有变量属性类型,标签,格式等.基本上将所有变量设置为缺失.将执行的下一个SET语句仅引入不要设置为缺失的变量.它没有明确地将变量设置为缺失,但实现了相同的结果.
data nomiss;
input id q1 g7 q3 b2 zz gl az tre;
cards;
1 1 2 1 1 1 2 1 1
2 2 3 3 2 2 2 1 1
3 1 2 3 3 2 1 3 3
4 3 1 2 2 3 2 1 1
5 2 1 2 2 1 2 3 3
6 3 1 1 2 2 1 3 3
;;;;
run;
proc print;
run;
data manymiss;
if 0 then set nomiss;
set nomiss(keep=id b2 tre:);
run;
proc print;
run;
Run Code Online (Sandbox Code Playgroud)