全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1332 3
2019-05-28
悬赏 30 个论坛币 未解决
复制代码
如果指定前3个变量,后一条观测的4个变量取值和前一条观测相同,则替换为缺失。结果为:
zb siteid no group visit value
rbc  1   1  1  1  3.5
      .   .   1   2  4.0
rbc  2   2  2  1  4.5
wbc  1   1  1  1  9.0
        .   .  1  2  9.9
wbc  2   2  2  1  9.3
        .   .  2  2  9.4


如果指定前4个变量,后一条观测的4个变量取值和前一条观测相同,则替换为缺失。
则结果为:
zb siteid no group visit value
rbc  1   1  1  1  3.5
      .   .    .   2  4.0
rbc  2   2  2  1  4.5
wbc  1   1  1  1  9.0
        .   .  .  2  9.9
wbc  2   2  2  1  9.3
        .   .  . 2  9.4


希望能用macro实现,谢谢!







二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-5-31 17:20:25
可以使用lag解决。macro可以自己设计一下macro变量。

data b;
        set aaa;

        zb_lag = lag(zb);
        siteid_lag = lag(siteid);
        no_lag = lag(no);
        group_lag =lag(group);

        if zb=zb_lag and siteid=siteid_lag and no=no_lag and group = group_lag then do;
                zb = '';
                siteid = .;
                no = .;
                group =.;
        end;
        else if zb=zb_lag and siteid=siteid_lag and no=no_lag then do;
                zb = '';
                siteid = .;
                no = .;
        end;

        drop zb_lag siteid_lag no_lag group_lag;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-7-8 17:40:25
应该是要这种效果吧,任意配置变量列表:

data aaa;
input zb$3. siteid no group visit value;
cards;
rbc  1   1  1  1  3.5
rbc  1   1  1  2  4.0
rbc  2   2  2  1  4.5
wbc  1   1  1  1  9.0
wbc  1   1  1  2  9.9
wbc  2   2  2  1  9.3
wbc  2   2  2  2  9.4
;
run;

/*任意配置以下变量列表即可*/
%let gv = zb,siteid,no;
/*%let gv = zb,siteid,no,group;*/


data _null_;
call symput('vv',  tranwrd("&gv." , "," , " ") );
call symput('mvv', tranwrd("&gv." , "," , "|") );
run;

%macro gend;
proc sort data = aaa;
by &vv;
;run;

%let i=1;
%do %until(%scan(&mvv,&i.,|)=);
%let lastv = %scan(&mvv,&i.,|);
%let i = %eval(&i.+1);
%end;


%let i=1;

data outds;
set aaa;
by &vv.;
if not first.&lastv. then do;
%do %until(%scan(&mvv,&i.,|)=);
%scan(&mvv,&i.,|)="";
%let i = %eval(&i.+1);
%end;
end;
run;

%mend;

%gend;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-7-31 13:37:11
指定前四个:
proc sort data=aaa;
    by zb siteid no group;
run;

data bbb;
    set aaa;
    by zb siteid no group;
    if first.group =0 then do;
    zb='';siteid=.;no=.;group=.;
    end;
run;
指定前三个:
proc sort data=aaa;
    by zb siteid no group;
run;

data bbb;
    set aaa;
    by zb siteid no group;
    if first.no =0 then do;
    zb=''; siteid=.; no=.;
    end;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群