楼主: zgwshmily
4190 3

请教高人如何用一个表格的列去替换另一个表格的列? [推广有奖]

  • 0关注
  • 1粉丝

已卖:408份资源

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
2169 个
通用积分
1.0200
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
287 点
帖子
25
精华
0
在线时间
20 小时
注册时间
2010-8-28
最后登录
2013-2-25

楼主
zgwshmily 发表于 2010-9-9 12:19:10 |AI写论文
30论坛币
我有一个data set 叫做missing, 里面每个id对应的变量v1 - v5 都有缺省值。其中id是a的只有v1,v2和v5有缺省值,id是b的只有v1和v3有缺省值,id是c的v2 - v5都是缺省值

data missing;
input id$ v1 v2 v3 v4 v5;
datalines;
a 1 . 1 3 1
a . 2 1 4 2
a . 4 5 2 8
a 1 5 2 3 .
b . 9 2 3 2
b 5 9 2 4 4
b . 3 . 5 3
c 2 . . . .
;


接下来我根据每个id都有一个data set是补全所有缺省值的。例如:
data complete_a;
input id$ v1 v2 v5;
  datalines;
a 1 2 1
a 2 2 2
a 3 4 8
a 1 5 6
;

data complete_b;
input id$ v1 v3 ;
  datalines;
b 1  2
b 5  2
b 3  4  
;
data complete_c;
input id$  v2 v3 v4 v5;
  datalines;
c 2 3 4 7
;
run;


最终我需要生成一个数据表格, 把所有的缺省值都补到原来的表格中去,如下
data complete;
input id$ v1 v2 v3 v4 v5;
datalines;

a 1 2 1 3 1
a 2 2 1 4 2
a 3 4 5 2 8
a 1 5 2 3 6
b 1 9 2 3 2
b 5 9 2 4 4
b 3 3 4 5 3
c 2 2 3 4 7

;
run;

实际问题中我的数据是有几千个id,每个id都有类似complete_a, complete_b, complete_c那样补全缺省值的表格。所以我想能否写成一个do 循环自动把补全缺省值的表格中的列替换原有的列。我觉得难点在于每个id缺省值出现的列都不一样。

请教高手!

最佳答案

soporaeternus 查看完整内容

楼主试试......
关键词:请教高人 如何用 Complete missing Lines 请教 表格

本帖被以下文库推荐

沙发
soporaeternus 发表于 2010-9-9 12:19:11
  1. data missing_01;
  2.         set missing;
  3.         by id;
  4.         if first.id then id1=0;
  5.         id1+1;
  6. run;

  7. data complete_01;
  8.         set
  9.                 complete_a
  10.                 complete_b
  11.                 complete_c
  12.         ;
  13.         by id;
  14.         if first.id then id1=0;
  15.         id1+1;
  16. run;

  17. data r;
  18.         update missing_01 complete_01;
  19.         by id id1;
  20.         drop id1;
  21. run;
复制代码
楼主试试......
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
pobel + 1 + 1 精彩帖子
hopewell + 1 + 1 + 1 好的意见建议

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

Let them be hard, but never unjust

藤椅
lihuiyingdudu 发表于 2010-9-10 01:00:37
我只知道怎么用micro 替换missing value. 我不清楚你的missing value 是用什么方法计算和替换的。我只能提供一点思路,下面的程序可以把所以的missing value替换成一个相同的值。如果是根据不同的id,不同的observation,missing value 的替换值都不一样的话,是否可以在这个的基础上做下改动呢,你可以试试看。
%MACRO REPLACE_MV(cols,mv=.,rplc=0);
ARRAY varlist {*} &cols;
DO _i = 1 TO dim(varlist);
IF varlist{_i} = &mv THEN varlist{_i}=&rplc;
END;
DROP _i;
%MEND;

板凳
rockfido 在职认证  发表于 2010-9-10 07:32:25
That's cool!! 2# soporaeternus

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

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