全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1334 7
2014-12-18
悬赏 50 个论坛币 已解决
求助SAS 编程:

如何将多个重复的observation合并成一个observation? 最终结果return为下:

ID   Rev1 Rev2 Rev3 Rev4
001   4       5      Null   10
002   19     20     Null   35
003   Null   45     Null   Null

以下是原数据(例子)

Data test;
Input Id$ Rev1$ Rev2$ Rev3$ Rev4$;
Datalines;
001 Null 5 Null Null
001 4 Null Null Null
001 Null Null Null 10
002 19 Null Null Null
002 Null 20 Null Null
002 Null Null Null 35
003 Null 45 Null Null
;
Run;

谢谢,欢迎大家讨论,写出code者赠予50个论坛币,谢谢大家!


二维码

扫码加我 拉你入群

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

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

全部回复
2014-12-18 12:58:15
复制代码
二维码

扫码加我 拉你入群

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

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

2014-12-18 13:36:44
Tigflanker 发表于 2014-12-18 13:10
谢谢了,我对您下面这个部分不是很懂,能否解释一下?

temp = ifc(cats(Rev) ~= 'Null' or first.id,Rev,temp);
    if last.id then Rev = temp;


另外求助一下,对于First & Last indicator 例如:
Data ex13c;                           
set ex13;
By ID;
If First.ID then count=0;
        count+1;
Run;

和下面这个code对比,最后结果是下一组数据的observation少于前面,您知道是为什么吗? 谢谢
Data ex13c;                           
set ex13;
By ID;
If First.ID then count=0;
        count+1;
If Last.ID;
Run;
二维码

扫码加我 拉你入群

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

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

2014-12-18 15:38:52
cchen59 发表于 2014-12-18 13:36
谢谢了,我对您下面这个部分不是很懂,能否解释一下?

temp = ifc(cats(Rev) ~= 'Null' or first.i ...
ifc(条件,a,b)是选择函数,条件成立返回a,否则返回b

最后的if相当于sql语句中的where
二维码

扫码加我 拉你入群

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

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

2014-12-19 11:51:56
cchen59 发表于 2014-12-18 13:36
谢谢了,我对您下面这个部分不是很懂,能否解释一下?

temp = ifc(cats(Rev) ~= 'Null' or first.i ...
if last.xxx;
是只保留本分组的最后一条观测,当然会少很多的。

temp = ifc(cats(Rev) ~= 'Null' or first.id,Rev,temp);
    if last.id then Rev = temp;
temp数组是为了做一个交换值的数组,该数组被Rev原值赋值的条件为:id分组的第一条观测 或 满足不为Null的时候。
第二句是在last,也就是id组最后一条时,把temp的值拿回。
二维码

扫码加我 拉你入群

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

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

2014-12-19 13:19:14
Tigflanker 发表于 2014-12-19 11:51
if last.xxx;
是只保留本分组的最后一条观测,当然会少很多的。
谢谢,逻辑很精彩,慢慢体会中...
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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