楼主: lbnjin
2786 4

请问:怎样用if语句,根据数据集B的list,将数据集A的对应观测筛选出来? [推广有奖]

  • 0关注
  • 0粉丝

硕士生

53%

还不是VIP/贵宾

-

威望
0
论坛币
1057 个
通用积分
1.5000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1173 点
帖子
85
精华
0
在线时间
226 小时
注册时间
2005-7-31
最后登录
2025-5-13

楼主
lbnjin 发表于 2012-9-19 15:05:09 |AI写论文
8论坛币

大家好。

我想问一个问题:怎样通过if条件语句,根据数据集Blist(在这里具体是numt),将数据集A的对应观测筛选出来,并生成新的数据集pickout?

dataA;

            input num    t   x;

            cards;

                        1        78        4

                        1        79        5

                        2        79        .

                        3        80        2

                        3        81        3

                        4        79        0

                        5        55        3

                        5        4         1

            ;

run;

dataB;

            input num  t;

            cards;

                        1  78

                        3  80

                        5  4

            ;

run;

期望的数据集pickout应该是:

                        1        78        4

                        3        80        2

                        5        4         1

我知道用procsql的select, exists可以很快地做出来,但不清楚是否可以在data语句中的用if来完成同样的工作?

谢谢!




最佳答案

pobel 查看完整内容

Data步: data A; input num t x; cards; 1 78 4 1 79 5 2 79 . 3 80 2 3 81 3 4 79 0 5 55 3 5 4 1 ; run; data B; input num t; cards; 1 78 3 80 5 4 ; run; *****************************; data c; set b; do i=1 to ...
关键词:list 数据集 IST 筛选出 Select

沙发
pobel 在职认证  发表于 2012-9-19 15:05:10
Data步:

data A;
            input num    t   x;
            cards;
1        78        4
1        79        5
2        79        .
3        80        2
3        81        3
4        79        0
5        55        3
5        4         1
;
run;


data B;
  input num  t;
  cards;
  1  78
  3  80
  5  4
;
run;

*****************************;
data c;
    set b;
        do i=1 to nobs;
           set a(rename=(num=num1 t=t1)) nobs=nobs point=i;
           put num= num1=;
       if num=num1 and t=t1 then output;
        end;
        keep num t x;
run;

*********************************;
proc sort data=a ; by num t;run ;
data d;
   merge a b(in=inb);
   by num t;
   if inb;
run;

**********************************;
data e;
    if 0 then set b;
        if _n_=1 then do;
            declare hash b(dataset:"b");
                           b.definekey('num','t');
                           b.definedata('num','t');
                           b.definedone();
        end;
        set a;
        if b.find()=0;
run;

和谐拯救危机

藤椅
webgu 发表于 2012-9-19 15:55:31
  1. data pickout;
  2.   if _n_=1 then do;
  3.   if 0 then set a;
  4.   declare hash ht (dataset : "a");
  5.   ht.definekey("num","t");
  6.   ht.definedata("x");
  7.   ht.definedone();
  8. end;
  9. set b;
  10. ht.find(key: num,key :t);
  11.   run;
复制代码

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

板凳
lbnjin 发表于 2012-9-20 01:30:14
pobel 发表于 2012-9-19 15:52
Data步:

data A;
NB~~

报纸
qinly10 发表于 2013-1-4 19:20:16
lbnjin 发表于 2012-9-20 01:30
NB~~
呵呵,webgu的更加精简呀

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-2 03:03