请教:如何将一个数据集的所有变量置为缺失?
看了3楼的程序感觉很有启发,不过又遇到一个问题,想接着请教下大家!
比如:a,b都按一个变量排了序,记录数和主键都一一对应。
data test;
set a;
set b;
此处:想当b的一个变量比如x=1时,把b的所有变量置缺失,而a的变量值不变,应该怎么做?
run;
data a;
input x a b;
datalines;
1 a1 b1
2 a2 b2
;
run;
data b;
input y m n;
datalines;
1 m1 n1
2 m2 n2
;
run;
data c;
set a;
set b;/*相当于按记录号连接*/
if sum(x,y)>2 then do; m='';n=''; end;
/*此处数据集b除变量y只有两个变量可以直接写出m=''; n='',可是数据集b变量很多时,一个一个写出来比较麻烦,能不能有简便的写法?*/注:不用sql的左连接,也即,可以理解为用data步实现左连接结果。
run;
data c;
set a;
set b;
if sum(x,y)>2 then call missing(of m--n);
run;
这种连接,如果变量名不重复的话,变量的顺序是不会混淆的。也就是说,左半边变量从a而来,右从b而来。如果要删掉b里的变量,只要定义首尾变量即可。不过我怀疑或许没有理解你的真实意图。
根据“soporaeternus”的提示终于用数组实现了上述功能。程序如下!^_^ 高兴,感谢大家,顺便帮看下有没有什么漏洞!
data a;
input x a $ b $;
datalines;
1 a1 b1
2 a2 b2
;
run;
data b;
input y m $ n $;
datalines;
1 m1 n1
2 m2 n2
;
run;
data c;
set a;
array a_character[*] _character_;
array a_numeric[*] _numeric_;
set b;
array b_character[*] _character_;
array b_numeric[*] _numeric_;
if sum(x,y)>2 then do;
do i=sum(dim(a_character,1),1) to dim(b_character,1);
b_character[i]='';
end;
do j=sum(dim(a_numeric,1),1) to dim(b_numeric,1);
b_numeric[j]=.;
end;
end;
drop i j;
run;