Loops SAS有条件返回报头

Loops SAS有条件返回报头,loops,header,sas,Loops,Header,Sas,我的数据集如下所示: 希望得到如下结果: 感谢您的帮助方法1:使用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; q

我的数据集如下所示:

希望得到如下结果:


感谢您的帮助

方法1:使用
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;
方式2:使用
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;

如果有任何澄清,请告诉我。

如果您想避免硬编码,可以使用数组


您还可以使用
VNAME(chars(i))
函数调用替换代码中的
CATX函数
调用,在这种情况下,您可以在变量名称中将grp更改为group。

要查找变量名称,可以使用
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;
结果:

Obs    name    group1    group2    group3     flag
 1     Joe        .         1         .      group1
 2     Moe        1         1         .      group3
 3     King       1         .         1      group2
 4     Penn       .         .         1      group1
 5     Zhee       1         .         .      group2
 6     None       1         1         1

你应该把你的问题中有和想要的样本作为文本,而不是图片的链接。实际上对于HAVE,更好的是使用数据步骤代码来创建HAVE数据集。另外,请描述您试图实现的逻辑,并包括您尝试过的代码。我想我已经附加了“have”和“Want”选项。请单击附加的链接“Data set”以获取我现在拥有的数据,以及“desired result”以获取所需数据。基本上,我希望遍历数据并输出每个标题名(标志)的第一个空行…请查看“期望的结果”帖子,因为文本使其他人更容易帮助您。否则,每个想帮助你的人都必须先自己输入。看起来你已经在电子表格中发布了一些细胞的小照片。你能把单元格复制成文本并粘贴到问题中,这样其他人就可以使用样本数据了吗?这样开始可能比一开始就努力拍照要容易得多。
Obs    name    group1    group2    group3     flag
 1     Joe        .         1         .      group1
 2     Moe        1         1         .      group3
 3     King       1         .         1      group2
 4     Penn       .         .         1      group1
 5     Zhee       1         .         .      group2
 6     None       1         1         1