楼主: children5656
2781 7

求助 循环 数据提取后合并 [推广有奖]

  • 1关注
  • 0粉丝

硕士生

3%

还不是VIP/贵宾

-

威望
0
论坛币
786 个
通用积分
2.5500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
6499 点
帖子
22
精华
0
在线时间
223 小时
注册时间
2014-12-12
最后登录
2024-3-3

楼主
children5656 发表于 2015-11-11 11:19:29 |AI写论文
50论坛币
求助,现在有6个数据集分别是A1-A6,这6个数据集中分别有唯一的ID和各自几列数据,
下面以其中的四个为例:  data a1;input id m6-m13;cards;
1 1 4 3 2 5 6 7 8
2 2 4 6 8 10 12 14 16
3 8 7 6 5 4 3 2 1
;run;
data a2;input id n15-n20;cards;
1 1 2 3 4 5 6
2 3 8 5 4 7 3
3 1 5 8 6 9 7
;run;
data a3;input id o13-o18;cards;
1 1 2 3 4 5 6
2 3 7 5 6 8 3
3 1 7 5 8 9 3
;
run;
data a4;input id p19-p22;cards;
1 1 2 3 4
2 3 5  8 3
3 1 7  9 3
;
run;
现在需要这四个数据集a1-a4中,每个数据集选取1列,合并求和生成一个新的数据集,例如:B1数据集包括6列,id m6 n15 o13 p19 以及m6 n15 o13 p19的和。然后每种可能性都产生一个新的数据集B1-Bn(本例中为1152种可能)。挺繁琐,也不知道表述清楚了没有,如有疑问欢迎跟帖,谢谢各位啦~


最佳答案

johnpark1 查看完整内容

You can only keep needed columns. Try below: data b(keep=id i1 i2 i3 i4 x1 x2 x3 x4); array a1 m6-m13; *8 elements; array a2 n15-n20; * 6 elements; array a3 o13-o18; * 6 elements; array a4 p19-p22; *4 elements; merge a1 a2 a3 a4; by id; do i1 = 1 to 8 by 1; do i2 = 1 to 6 by 1; do i3 = 1 to 6 by 1; do i4 = 1 to 4 by 1; x1 = a1; x2 = a2; x3 = a3; x4 = a4; output; end; end; end ...
关键词:数据提取 cards Input card Data

沙发
johnpark1 发表于 2015-11-11 11:19:30
You can only keep needed columns. Try below:

data b(keep=id i1 i2 i3 i4 x1 x2 x3 x4);
array a1 m6-m13; *8 elements;
array a2 n15-n20; * 6 elements;
array a3 o13-o18; * 6 elements;
array a4 p19-p22; *4 elements;  
merge a1 a2 a3 a4; by id;
do i1 = 1 to 8 by 1;
do i2 = 1 to 6 by 1;
do i3 = 1 to 6 by 1;
do i4 = 1 to 4 by 1;
x1 = a1[i1];
x2 = a2[i2];
x3 = a3[i3];
x4 = a4[i4];
output;
end;
end;
end;
end;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
teqel 发表于 2015-11-11 12:22:19
建议放在一个数据集里面
已有 1 人评分论坛币 收起 理由
admin_kefu + 5 热心帮助其他会员

总评分: 论坛币 + 5   查看全部评分

板凳
children5656 发表于 2015-11-11 13:17:58
teqel 发表于 2015-11-11 12:22
建议放在一个数据集里面
恩,这个之前已经想过了。因为数据量太大,使用array把data A1-A6放在一起的话,超过SAS数据集上限了

报纸
children5656 发表于 2015-11-11 15:12:06
johnpark1 发表于 2015-11-11 13:31
You can only keep needed columns. Try below:

data b(keep=id i1 i2 i3 i4 x1 x2 x3 x4);
谢谢,昨天我也是用的这种方法写的,不过因为arraya1-a6数据量太大,约有3万种组合方式,在一个数据集内放不下。sas运行时提示,数据集的空间不够。
所以才想能否把数据放到多个数据集中的方法。或者您看你有什么好办法没有,能够把这些数据表示出来,谢谢。

地板
johnpark1 发表于 2015-11-11 15:22:22
你每个数据的ID有多少?总共会有多少条记录?
是硬盘不够吗?

7
children5656 发表于 2015-11-12 00:12:10 来自手机
johnpark1 发表于 2015-11-11 15:22
你每个数据的ID有多少?总共会有多少条记录?
是硬盘不够吗?
嗯,根据您的建议改了逻辑库可以了,产生了一个15G的数据集。
数据集太大,能打开,但一拉进度条就卡。  这种的数据集,您看使用sql还是什么调用合适呐。
比如有1万个数据,我想把每种选择可能的1万个数据挑出来,用什么,怎么写比较适合这么大的数据集呐谢谢

8
teqel 发表于 2015-11-12 01:42:47
你每个数据到底多大?如果太大,可以分为10个左右的分数据

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

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