答案 0 :(得分:1)
Way1:使用proc sql
proc sql;
create table want as
select name,group1,group2,group3,
case when group1 is null then 'group1'
when group2 is null then 'group2'
when group3 is null then 'group3'
end as flag
from have;
quit;
Way2:使用datastep
data want;
set have;
if group1 is null then flag = 'group1';
else if group2 is null then flag = 'group2';
else if group3 is null then flag = 'group3';
else flag = 'check';
run;
如有任何澄清,请通知我。
答案 1 :(得分:0)
如果您想避免硬编码,可以使用数组。
data have; infile datalines dlm=',' dsd; input name $ grp1 grp2 grp3; datalines; Joe,,1, Moe,1,1, King,1,,1 Penn,,,1 Zhee,1,,, ; run; data want; set have; length flag $10; call missing(flag); array chars(3) grp1 grp2 grp3; do i=1 to 3; if chars(i)=. & flag='' then flag=catx(' ',"Group",i); end; drop i; run;
您还可以使用VNAME(chars(i))
函数调用替换代码中的CATX function
调用,在这种情况下,您可以将变量名称中的grp更改为group。
答案 2 :(得分:0)
要查找变量的名称,您可以使用def fun(ret):
return ret
class A:
def __init__(self):
for string in ['a', 'b']:
setattr(self, string, lambda: fun(string))
>>> a = A()
>>> a.a()
'b'
功能。您可以使用数组搜索所有单独的输入标志变量,当您发现丢失的变量时,使用VNAME()来获取其名称。
VNAME()
结果:
data have;
input name $ group1-group3 ;
cards;
Joe . 1 .
Moe 1 1 .
King 1 . 1
Penn . . 1
Zhee 1 . .
None 1 1 1
;
data want ;
set have ;
array flags group1-group3 ;
length flag $32 ;
do _n_=1 to dim(flags) while (missing(flag));
if missing(flags(_n_)) then flag=vname(flags(_n_));
end;
run;
proc print;
run;