楼主: roberthk309
3118 5

[原创博文] 对多个数据集中相同位置的变量进行计算 [推广有奖]

  • 0关注
  • 0粉丝

高中生

85%

还不是VIP/贵宾

-

威望
0
论坛币
26 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1605 点
帖子
17
精华
0
在线时间
53 小时
注册时间
2009-12-11
最后登录
2019-1-4

楼主
roberthk309 发表于 2011-4-27 14:10:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在又大约100个数据集,每个数据集的名称不同,变量名称也不相同,但相同的列记录的观测的意义相同。
现在想跨数据集对这些变量求和,不知如何进行?
例如:
数据集1:dataset.a001,变量为a,b,c,d,e,f
数据集2:dataset.a002,变量为g,h, i,j,k,l
现想定义一个新变量HH,定义HH为原数据集中第二个变量和第五个变量的和,然后对每个数据集都是对第二个变量和第五个变量求和,不知如何处理?

菜鸟一枚,还请赐教!
二维码

扫码加我 拉你入群

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

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

关键词:数据集 dataset DataS Data TAS 记录 如何

回帖推荐

sas_user 发表于2楼  查看完整内容

1# roberthk309 data a; input x y; datalines; 1 2 3 4 ; run; data b; input m n; datalines; 3 5 2 7 ; run; OPTIONS symbolgen mlogic mprint; %macro sumcrossds(lib1=, lib2=, dsa=, dsb=, varnum1=, varnum2=); proc sql; select name into :i from dictionary.columns where libname=%upcase("&lib1") and memname=%upcase("&dsa") and varnum=&varnum1; select name into :j from dictionar ...

本帖被以下文库推荐

沙发
sas_user 发表于 2011-5-3 09:32:09
1# roberthk309
data a;
input x y;
datalines;
1 2
3 4
;
run;
data b;
input m n;
datalines;
3 5
2 7
;
run;


OPTIONS symbolgen mlogic mprint;
%macro sumcrossds(lib1=, lib2=, dsa=, dsb=, varnum1=, varnum2=);

proc sql;
select name into :i from dictionary.columns where libname=
%upcase("&lib1") and memname=%upcase("&dsa") and varnum=&varnum1;
select name into :j from dictionary.columns where libname=
%upcase("&lib2") and memname=%upcase("&dsb") and varnum=&varnum2;
QUIT;
data y;
merge &dsa(keep=&i) &dsb(keep=&j);
sum=&i+&j;
run;
%mend;

%sumcrossds (lib1=work, lib2=work, dsa=a, dsb=b, varnum1=
1, varnum2=2)


已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

藤椅
soporaeternus 发表于 2011-5-3 09:47:31
不用merge吧......
楼主貌似是单表的指定变量操作
Let them be hard, but never unjust

板凳
hopewell 发表于 2011-5-4 21:07:13
  1. data a;
  2.     input x y z;
  3. datalines;
  4. 1 2 3
  5. 2 3 4
  6. 3 4 5
  7. ;
  8. data b;
  9.     input a b c;
  10. datalines;
  11. 11 12 13
  12. 21 22 23
  13. 31 32 33
  14. ;
  15. %macro Benhope(lib,num1,num2);
  16.     data _temp;
  17.         do _n_=1 by 1 until(last.memname);
  18.             set sashelp.vcolumn(where=(libname="%upcase(&lib)" and memtype='DATA'));
  19.             by memname notsorted;
  20.             if varnum=&num1 then var1=name;
  21.             else if varnum=&num2 then var2=name;
  22.         end;
  23.         keep memname var1 var2;
  24.     run;
  25.     %let dsid=%sysfunc(open(work._temp));
  26.     %do i=1 %to %sysfunc(attrn(&dsid,nobs));
  27.         %syscall set(dsid);
  28.         %let rc=%sysfunc(fetchobs(&dsid,&i));        
  29.         data &memname;
  30.             set &memname;
  31.             sum=&var1+&var2;
  32.         run;
  33.     %end;
  34.     %let rc=%sysfunc(close(&dsid));
  35.     proc datasets library=work nolist;
  36.         delete _temp;
  37.     quit;
  38. %mend;
  39. %benhope(work,1,3)
复制代码
观钓颇逾垂钓趣 种花何问看花谁

报纸
275769263 发表于 2011-5-5 11:24:55
楼上为什么这么复杂,是不是我理解错意思了?最后需要对每个数据集的HH求和吗?
data a1;
    input x y z;
datalines;
1 2 3
2 3 4
3 4 5
;
data a2;
    input a b c;
datalines;
11 12 13
21 22 23
31 32 33
;
run;
%macro sample;
%do i=1 %to 2;
data out&i;
set a&i;
array arr(*) _NUMERIC_;
HH=arr[1]+arr[3];
run;
%end;
%mend;
%sample

地板
roberthk309 发表于 2011-5-5 15:21:18
感谢以上各位指点 按照275769263提供的方法解决了 谢谢!

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

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