楼主: goubuli2011
26083 16

[问答] merge data1(in=in1) data2(in=in2); in 是什么意思? [推广有奖]

11
register_me 发表于 2011-3-22 20:27:31 |只看作者 |坛友微信交流群
merge dataset1(in=a) dataset2(in=b);
就是在merge好的数据集中有两个虚拟变量a和b, 当当前记录来自dataset1时,a的值为1,否则为0,b也是如此,所以你可以通过if语句保留你想要的记录,
如,
if a and b该记录在两个数据集中都出现过
if a在1中出现过
if b在2中出现过

使用道具

12
register_me 发表于 2011-3-22 20:32:17 |只看作者 |坛友微信交流群
也可以用if a and not b;表示在1中而不再2中的记录

使用道具

13
rocket_1025 发表于 2013-8-8 14:44:41 |只看作者 |坛友微信交流群
好帖,学习

使用道具

14
moraine123 发表于 2015-1-29 09:39:22 |只看作者 |坛友微信交流群
学习了,多谢楼上各位。

使用道具

15
木子星 发表于 2015-1-29 14:53:33 |只看作者 |坛友微信交流群
个人理解,仅供参考!
merge里的in选项,是用来标示一条记录值是否属于该数据集的临时变量,注意是临时变量。所以你在数据中是看不到的,但可以通过变量赋值的方法,使其结果保留在数据集中。
Data步主要通过数据指针和PDV来实现,Data是按照记录一条一条进行的。
1.        在你提供的例子中,Data开始运行时,先检查语法,然后编译,产生PDV,PDV包括了Data1和Data2的所有变量以及ina、inb这两个变量,但初始值为缺失。
2.        因为有by,即数据分组功能,data1是按照x1变量by分组的,此时,数据指针指向data1按x1(假设x1=n)分组排序的第一条记录,读入变量值到PDV中,in1此时值为1,表示该记录来自数据集data1,同时数据指针也指向了data2的相同变量x1(x1=n)分组第一条记录,in2此时的值为1,则data步运行下一条语言,if in1 and in2,都为真,则输出到数据集;
3.        当然,如果data1里面x1(x1=n)的值只有1个,那么data步第二次循环时,会将data2中(x1=n)的第二条读入PDV,则输出data3数据集的第二条记录;当data1里面x1(x1=n)的值有多个时,那第二次循环时,数据指针会指向被by分组的x1的第二条记录,同样的,读入data2中的x1记录到PDV,则再输出到数据集data3中。
4.        当data1或data2中,并无可匹配的x1值的记录时,则in1或in2中有一个值为0,即无法满足判断条件if in1 and in2,则未输出PDV里的数据值到data3中,进入下一次循环,直到数据指针到达data1的数据末尾,Data步循环结束。
以上只是我自己的理解,并不一定完全正确,欢迎大家指正,很久没有在碰SAS了,还真舍不得。

使用道具

16
zhangc27 发表于 2016-11-23 02:32:32 |只看作者 |坛友微信交流群
搞这么复杂,不就是个label吗。。。

使用道具

17
prince315 在职认证  发表于 2016-11-23 09:59:29 |只看作者 |坛友微信交流群
zhangc27 发表于 2016-11-23 02:32
搞这么复杂,不就是个label吗。。。
首先这就是不断讨论才可以让更多人学习了解的过程,其次这里似乎根本就没有什么label的问题。
建议可以继续看看之前楼层的回复,希望对你的理解上有所帮助。

使用道具

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

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

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

GMT+8, 2024-4-27 13:03