楼主: 艾罗二氏管
16826 5

sas in的用法 [推广有奖]

  • 0关注
  • 0粉丝

大专生

80%

还不是VIP/贵宾

-

威望
0
论坛币
548 个
通用积分
2.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
3721 点
帖子
11
精华
0
在线时间
110 小时
注册时间
2015-4-26
最后登录
2024-11-17

楼主
艾罗二氏管 发表于 2016-3-18 18:57:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求大神讲解一下,IN option 的用法,有些不理解,用来TRACKING 前面的数据集,但是in=variable,in中的变量也是新建的,系统怎么和原数据集匹配的啊。。。。例如一段代码:data work.all;  merge work.emp._name(in=emp_n)  work.emp_dept(in=emp_d);by empid; if (emp_n and not emp_d) or (emp_d and not emp_n);run;
求问怎么看这段代码,尤其是in的用法。
二维码

扫码加我 拉你入群

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

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

关键词:Tracking Variable Option track Merge option 新建

沙发
孤单的我们 发表于 2016-3-19 11:33:00
首先,替换一下in选项创建的变量
  1. data work.all;
  2.         merge work.emp._name(in=a)  work.emp_dept(in=b);
  3.         by empid;
  4.         if (a and not b) or (b and not a);
  5. run;
复制代码


merge by根据by的相同值横向合并,in选择则创建一个临时变量,
如果来自该数据集,则临时变量=1,否为0。


if (a and not b) or (b and not a);
等价于
if (a=1 & b=0) or (b=1 & a=0);

也就是2个集合去掉共同部分,用集合表示为A∪B-A∩B。
程序也可以简化为 if not (a & b)

藤椅
艾罗二氏管 发表于 2016-3-19 14:26:15
好像理解了一点,刚刚做了一个小程序测试,还是有不懂的地方。
在work中建立了两个数据集 gercrew和gersched,
gercrew数据集是 empid        lastname
                        e00632      strauss
                        e01483      schnell-haungs
                        e01996      wellhaeusser
                        e04064      waschk
gersched数据集是empid        flightname
                        e00632      5250
                        e01996      5501
                        e04064      5105
然后把两个merge 起来,data nextweek;
                                 merge gercrew;
                                          gersched(in=a);
                                     by empid;
                                   if a=1;run;
按理来说应该是返回in变量为1的观测,但是自己的in没有起作用,返回的结果就是横向的merge,三条观测。不懂in变量要怎么用。多谢大神的指导。


                                   

板凳
艾罗二氏管 发表于 2016-3-19 14:27:20
孤单的我们 发表于 2016-3-19 11:33
首先,替换一下in选项创建的变量
好像理解了一点,刚刚做了一个小程序测试,还是有不懂的地方。
在work中建立了两个数据集 gercrew和gersched,
gercrew数据集是 empid        lastname
                        e00632      strauss
                        e01483      schnell-haungs
                        e01996      wellhaeusser
                        e04064      waschk
gersched数据集是empid        flightname
                        e00632      5250
                        e01996      5501
                        e04064      5105
然后把两个merge 起来,data nextweek;
                                 merge gercrew;
                                          gersched(in=a);
                                     by empid;
                                   if a=1;run;
按理来说应该是返回in变量为1的观测,但是自己的in没有起作用,返回的结果就是横向的merge,三条观测。不懂in变量要怎么用。多谢大神的指导。

报纸
孤单的我们 发表于 2016-3-20 18:47:41
  1. data nextweek;
  2.         merge gercrew gersched(in=a);
  3.         by empid;
  4.         if a=1;
  5. run;
复制代码

gercrew中的empid (e00632 e01483 e01996 e04064)
与gersched中的empid(e00632 e01996 e04064)进行匹配。
a=1表明empid来自gersched
gercrew中的e01483没有匹配,因此结果只有3个观测
e00632 strauss 5250
e01996 wellhaeusser 5501
e04064 waschk 5105


如果是横向合并的话,生成的是4个观测。
e00632 strauss 5250
e01483 schnell-haungs 5501
e01996 wellhaeusser 5105
e04064 waschk .

地板
艾罗二氏管 发表于 2016-3-20 20:25:53
孤单的我们 发表于 2016-3-20 18:47
gercrew中的empid (e00632 e01483 e01996 e04064)
与gersched中的empid(e00632 e01996 e04064)进行匹 ...
谢谢大神,已经理解

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 06:58