楼主: 920240553
6723 10

求助:多条观测如何合并为一条观测? [推广有奖]

  • 0关注
  • 1粉丝

SAS问鼎

已卖:61份资源

博士生

86%

还不是VIP/贵宾

-

威望
0
论坛币
1764 个
通用积分
4.2602
学术水平
9 点
热心指数
12 点
信用等级
3 点
经验
4853 点
帖子
129
精华
0
在线时间
419 小时
注册时间
2013-11-30
最后登录
2025-6-27

楼主
920240553 发表于 2014-11-20 10:37:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有如下一个数据集:
  1. data a ;
  2.         input a$ b c;
  3.         cards;
  4.         zhang 1 .
  5.         zhang . 2
  6.         wang 3 .
  7.         wang . 4
  8.         ;
  9. run;
复制代码
想把它合并成如下数据集:
  1. data aa ;
  2.         input a$ b c;
  3.         cards;
  4.         zhang 1 2
  5.         wang 3 4
  6.         ;
  7. run;
复制代码
烦请各位大神给支招,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:Input cards Hang Wang card 如何

回帖推荐

farmman60 发表于7楼  查看完整内容

唯SAS之鼎也!

沙发
920240553 发表于 2014-11-20 13:55:59
补充一下:以变量a为分组标志,对于每一组,变量b、c仅有一个数值,其余都是缺失值。
如zhang组中,变量b的值为1,其余是缺失值,变量c的值为2,其余为缺失值;
再如wang组中,变量b的值为3,其余是缺失值,变量c的值为4,其余为缺失值。
对于分组数据而言,这个数据集该如何操作成每组仅一条记录呢?

藤椅
xuelin55 发表于 2014-11-20 14:15:54
data a ;
input a$ b  c  ;
cards;
zhang 1 .  
zhang . 2
wang 3 .
wang . 4
        ;

run;
proc sort data=a;
by a;
data b(keep=a d);
format b1 c1 $12.;
set a;
by a;
retain b1 c1;
if first.a then do;
b1=trim(left(b));
c1=trim(left(c));
end;
else do;
b1=trim(left(b1))||trim(left(b));
c1=trim(left(c1))||trim(left(c));
end;
d=compbl(compress(b1||c1,'.','l'));
if last.a then output;
run;

板凳
xuelin55 发表于 2014-11-20 14:17:41
怎么乱掉了呢。。。。

proc sort data=a;
by a;
data b(keep=a d);
format b1 c1 $12.;
set a;
by a;
retain b1 c1;
if first.a then do;
b1=trim(left(b));
c1=trim(left(c));
end;
else do;
b1=trim(left(b1))||trim(left(b));
c1=trim(left(c1))||trim(left(c));
end;
d=compbl(compress(b1||c1,'.','l'));
if last.a then output;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
920240553 + 1 + 1 + 1 热心帮助其他会员

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

报纸
920240553 发表于 2014-11-20 14:44:02
xuelin55 发表于 2014-11-20 14:17
怎么乱掉了呢。。。。

proc sort data=a;
这个结果是不对的,目标并不是要把数据进行连接而成为了字符串,原始数据是数值形式的,即便衍生新的变量也不要改变数据类型。
非常感谢你的热心帮助,请再根据目标改动一下,谢谢!

地板
yongyitian 发表于 2014-11-20 20:53:43
  1. proc sort data=a; by a; run;

  2. data b;
  3.    merge a(drop=c where=(b^=.))
  4.          a(drop=b where=(c^=.));
  5.    by a;
  6. run;
复制代码
已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
920240553 + 1 + 1 + 1 + 1 热心帮助其他会员
李会超 + 24 热心帮助其他会员

总评分: 经验 + 24  论坛币 + 1  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

7
farmman60 发表于 2014-11-20 22:15:47
  1. proc sort data=a;
  2. by a;
  3. run;

  4. data want;
  5.   update a(obs=0) a;
  6.   by a;
  7.   run;
复制代码
已有 1 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
920240553 + 1 + 1 + 1 + 1 热心帮助其他会员

总评分: 论坛币 + 1  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

8
920240553 发表于 2014-11-21 10:12:14
farmman60 发表于 2014-11-20 22:15
请教:update语句中修改数据集用了OBS=0这个条件,这个是基于什么思路?

9
playmore 发表于 2014-11-21 13:22:06
920240553 发表于 2014-11-21 10:12
请教:update语句中修改数据集用了OBS=0这个条件,这个是基于什么思路?
这办法挺好,用a本身updata这个a
obs=0是为了得到仅包含a的变量设置(名称和格式等),但没有一条观测的数据集

10
920240553 发表于 2014-11-21 14:26:39
playmore 发表于 2014-11-21 13:22
这办法挺好,用a本身updata这个a
obs=0是为了得到仅包含a的变量设置(名称和格式等),但没有一条观测的 ...
我也觉得这个办法非常%>_<%酷,说实话,updata语句平时很少用。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-26 20:14