全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2293 7
2017-08-21
data aa;
input var1$;
datalines;
aa
ab
abc
acbac
;
run;

想得到如下数据集,如果某条观测X包含另一条观测Y,那么删除观测X;
即希望得到表: var
                       aa
                       ab
                       acbac
请问该怎么做?
二维码

扫码加我 拉你入群

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

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

全部回复
2017-8-22 09:21:37
data aa;
input var $;
datalines;
aa
ab
abc
acbac
;

data test(drop=var2);
set aa;
if _N_ >= 2 then do i=1 to _N_-1;
set aa (rename=(var=var2)) point=i;
if index(strip(var),strip(var2))>=1 then delete;
end;
run;
二维码

扫码加我 拉你入群

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

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

2017-8-22 09:49:50
提供土办法一个
data aa;
        input var1 $;
datalines;
aa
ab
abc
acbac
;
run;

proc sort data=aa nodup;
        by var1;
run;

proc transpose data=aa out=bb(drop=_name_);
        var var1;
run;

data cc;
        set aa;
        if _n_=1 then set bb;
        array col[*] col1-col4;
        do i=1 to dim(col);
                if _n_^=i and find(col[i],var1,'t') then delete;
        end;
run;
二维码

扫码加我 拉你入群

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

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

2017-8-23 10:54:09
albusdzx 发表于 2017-8-22 09:21
data aa;
input var $;
datalines;
非常感谢,您的代码实在太精彩了。但是楼主还有一点不明白,为什么要加point?

另附上加point和去掉point的结果,不明白去掉point为什么只有3行观测了,能不能从PDV读取数据的过程讲一下? 22.png 11.png
二维码

扫码加我 拉你入群

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

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

2017-8-23 11:16:31
l1i2n3i4n5g 发表于 2017-8-22 09:49
提供土办法一个
data aa;
        input var1 $;
感谢您提供的思路,方法永远不嫌多~
二维码

扫码加我 拉你入群

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

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

2017-8-23 12:06:07
yaoyinuo888 发表于 2017-8-23 10:54
非常感谢,您的代码实在太精彩了。但是楼主还有一点不明白,为什么要加point?

另附上加point和去掉po ...
你好  我运行了下面的代码,可能可以帮助解释为什么去掉point只有三个观测:
data aa;
input var $;
datalines;
aa
ab
abc
acbac
;


data test;
put 'before1' _N_=;
set aa;
put 'after1' _N_=;
if _N_ >= 2 then do i=1 to _N_-1;
put 'before2' _N_=;
set aa (rename=(var=var2));
put 'after2' _N_=;
/*if index(strip(var),strip(var2))>=1 then delete;*/
end;
run;

日志里显示的结果是:
before1_N_=1
after1_N_=1
before1_N_=2
after1_N_=2
before2_N_=2
after2_N_=2
before1_N_=3
after1_N_=3
before2_N_=3
after2_N_=3
before2_N_=3
after2_N_=3
before1_N_=4
after1_N_=4
before2_N_=4
after2_N_=4
before2_N_=4
也就是说第一个set已经完成了对第4个观测的读取,但是第二个set读到半截因为没有更多观测,指针到达最下面了(应该是读第4、5、6个观测,但是读完第4个然后想读第5个时sas发现没了),所以两个set由于一个set指针到底了就完成了data步

我个人对pdv的理解也不是特到位,希望能帮助你理解

二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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