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