我想创建一个名为DATFL的变量,它将为最后一次观察创建以下值:
DATFL
gender/scan代码如下:
data mix_ ;
input id $ name $ gender $ scan $;
datalines;
1 jon M F
2 jill F L
3 james F M
4 jonas M M
;
run;
data mix_3; set mix_;
length datfl datfl_ $ 50;
array m4(*) id name gender scan;
retain datfl;
do i=1 to dim(m4);
if index(m4(i) ,'M') then do;
datfl_=vname(m4(i)) ;
if missing(datfl) then datfl=datfl_;
else datfl=strip(datfl)||"/"||datfl_;
end;
end;
run;不幸的是,我在最后一次观察中得到的'DATFL‘的值是’gender/scan/gender/scan‘。很明显,因为我对'DATFL’使用了retain语句,所以我最终得到了重复的结果。在这个数据步骤的末尾,我计划使用CALL SYMPUT语句将最后一个值加载到宏变量中,但我不会这样做,直到我修复了我的issue...Can有人能给我一个指导,如何防止'DATFL‘在数据集的末尾有重复的值?干杯sas_kappel
发布于 2014-11-27 04:29:26
不保留DATFL,相反,保留DATFL_。
data mix_3; set mix_;
length datfl datfl_ $ 50;
array m4(*) id name gender scan;
retain datfl_;
do i=1 to dim(m4);
if index(m4(i) ,'M') then do;
datfl_=vname(m4(i)) ;
if missing(datfl) then datfl=datfl_;
else datfl=strip(datfl)||"/"||datfl_;
end;
end;
if missing(datfl) then datfl = datfl_;
run;发布于 2014-11-27 18:20:53
It‘t work...Let me change the dataset (mix_),您可以看到RETAIN DATFLl_在这种情况下不起作用。
data mix_ ;
input id $ name $ gender $ scan $;
datalines;
1 jon M M
2 Marc F L
3 james F M
4 jonas H M
;
run;为了继续,我想要的是将DATFL的不同值转换为一个宏变量。对于每个记录,我建议的代码都会搜索具有字母M的变量,如果为真,则DATFL将接收数组变量的变量名。如果有多个变量名,则它们将用'/‘分隔。对于接下来的记录,执行相同的操作,但只添加满足条件的变量名和尚未保留在DATFL中的变量。目前,如果您运行我的程序,我在观察值4处有DATFL,DATFL=gender/scan/name/scan/scan,但我希望DATFL=gender/scan/name,因为这两个值是不同的。最终,我将编写以下代码;
if eof then CALL SYMPUT('DATFL',datfl);sas_kappel
发布于 2014-11-27 22:03:39
您修改后的数据会让您更清楚地了解您要查找的内容。下面是一些代码,它们应该会给出正确的结果。
我已经使用CALL CATX函数向DATFL添加了新值,并用/分隔。它首先检查相关的变量名是否在字符串中不存在。
data mix_ ;
input id $ name $ gender $ scan $;
datalines;
1 jon M M
2 Marc F L
3 james F M
4 jonas H M
;
run;
data _null_;
set mix_ end=eof;
length datfl $100; /*or whatever*/
retain datfl;
array m4{*} $ id name gender scan;
do i = 1 to dim(m4);
if index(m4{i},'M') and not index(datfl,vname(m4{i})) then call catx('/',datfl,vname(m4{i}));
end;
if eof then call symput('DATFL', datfl);
run;
%put datfl = &DATFL.;https://stackoverflow.com/questions/27156221
复制相似问题