全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1574 2
2020-04-17
复制代码
程序如上,问题是aa3中,期望trt为空时赋trt1的值,但实际应用中会只赋aa2的第一行的trt1的值。
解决方法也有,就是在data aa3 步,set后加by subjid visit;或者另起一data步进行if。
但我并不清楚详细原理,希望各位老师帮忙
二维码

扫码加我 拉你入群

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

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

全部回复
2020-4-18 21:05:57
因为PDV的机制是,每次迭代只处理一个观测,而每次迭代对于内部数据集原有变量值保持(迭代时未缺失则进行替换,否则保留原值),新生成变量值清空(迭代时通过data step指定的生成方式生成)。

本例中,trt属于原有变量,故在下一次迭代时,若trt未缺失,则进行替换,缺失则保持原有值:pho。所以除了第一个观测外的其它观测都不满足trt=" "。 但是若把下列code if语句中的trt换成新变量trt2,对于trt=" "的观测,trt2的取值就等都于trt1了
复制代码
微信图片_20200418205109.png

二维码

扫码加我 拉你入群

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

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

2020-4-20 11:10:01
Cecilia_Xi 发表于 2020-4-18 21:05
因为PDV的机制是,每次迭代只处理一个观测,而每次迭代对于内部数据集原有变量值保持(迭代时未缺失则进行替 ...
感谢老师的解答,
trt属于原有变量,故在下一次迭代时,若trt未缺失,则进行替换,缺失则保持原有值
是不是这么理解
trt属于aa原有变量,故在下一次迭代时,若数据集aa2的trt未缺失,则进行替换,缺失则保持原有值
而另起一个data步能解决,原因就是取消了这个迭代过程。
我这个理解是不是正确的?另外by 语句能解决这个问题是为什么呢,
复制代码


我尝试将aa2的visit增加到3个,但by语句依然解决了问题。

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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