楼主: yaoyinuo888
2019 7

[问答] 怎么删除满足下面条件的观测 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

30%

还不是VIP/贵宾

-

威望
0
论坛币
1317 个
通用积分
0
学术水平
2 点
热心指数
2 点
信用等级
2 点
经验
1341 点
帖子
102
精华
0
在线时间
140 小时
注册时间
2016-6-26
最后登录
2022-2-8

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
data aa;
input var1$;
datalines;
aa
ab
abc
acbac
;
run;

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

扫码加我 拉你入群

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

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

关键词:下面条 Lines Input Data line

回帖推荐

albusdzx 发表于2楼  查看完整内容

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;
沙发
albusdzx 发表于 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;
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
阿扁V5 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 60  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

藤椅
l1i2n3i4n5g 在职认证  发表于 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;
已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
阿扁V5 + 40 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 40  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

板凳
yaoyinuo888 在职认证  发表于 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

使用道具

报纸
yaoyinuo888 在职认证  发表于 2017-8-23 11:16:31 来自手机 |只看作者 |坛友微信交流群
l1i2n3i4n5g 发表于 2017-8-22 09:49
提供土办法一个
data aa;
        input var1 $;
感谢您提供的思路,方法永远不嫌多~

使用道具

地板
albusdzx 发表于 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的理解也不是特到位,希望能帮助你理解

使用道具

7
yaoyinuo888 在职认证  发表于 2017-8-23 20:10:15 |只看作者 |坛友微信交流群
albusdzx 发表于 2017-8-23 12:06
你好  我运行了下面的代码,可能可以帮助解释为什么去掉point只有三个观测:
data aa;
input var $;
谢谢您的回复,翻了pdv的书,还是没搞懂

使用道具

8
yaoyinuo888 在职认证  发表于 2017-8-23 20:28:20 |只看作者 |坛友微信交流群
data aa;
input var $;
datalines;
aa
ab
abc
acbac
;

data test;
set aa;
if _N_ >= 2 then do i=1 to _N_-1;
set aa (rename=(var=var2));
end;
run;

                  PDV      _N_   var    i    var2
当_N_=1 , PDV里是    1     aa                    if为假,跳过,end结束完成第一次迭代,开始第二次迭代
   _N_=2,  PDV          2      ab                    if 为真 进入循环
   _N_=2,PDV          2      ab    1     aa      _N_-1=1,do循环结束,i+1
   _N_=2,  PDV          2      ab     2    aa      第二次迭代结束,开始第三次迭代
   _N_=3,  PDV          3      abc   2     aa     if 为真,进入循环
   _N_=3,PDV          3     abc   1      aa     i=1
   _N_=3,   PDV         3     abc    2     ab     i=2   _N_-1=2,do 循环结束,i+1
   _N_=3,   PDV         3     abc    3     ab     第三次迭代结束,开始第四次迭代

所以数据集test前3行应该是     var  i  var2
                                             aa
                                             ab  2   aa
                                            abc  3   ab     才对啊!

可是实际结果是:             var  i  var2
                                       aa
                                       av   2   aa
                                       abc  3   abc         

哪里出错了?请高人指出来,已经烦恼我1天了
      

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-26 14:04