全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
16738 5
2016-03-18
求大神讲解一下,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的用法。
二维码

扫码加我 拉你入群

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

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

全部回复
2016-3-19 11:33:00
首先,替换一下in选项创建的变量
复制代码


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
复制代码

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)进行匹 ...
谢谢大神,已经理解
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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