【问题标题】:How to join multiple columns into one in sas如何在sas中将多列合并为一列
【发布时间】:2016-09-07 16:51:07
【问题描述】:

我有一个时间序列 SAS 数据集,我想将其传输到垂直数据集。

我的数据看起来像..

ID A2009 A2010 A2011 A2012
1      1     2     3     4  
2      1     2     3     4   
3      1     2     3     4   
4      1     2     3     4   
5      1     2     3     4    

data multcol;
infile datalines;
input ID A2009 A2010 A2011 A2012 A2013;
return;
datalines;
1 1 2 3 4 5
2 1 2 3 4 5
3 1 2 3 4 5
4 1 2 3 4 5
5 1 2 3 4 5
;
run;

proc print data=multcol noobs;
run;

我在网上搜索仅找到以下某人的解决方案。无效。 但是我的数据集太大了,这个方法关闭了我的电脑。

data cmbcol(keep=a orig_varname orig_obsnum);
set multcol;
array myvars _numeric_;
do i = 2 to dim(myvars);
orig_varname = vname(myvars(i));
orig_obsnum = _n_;
A = myvars(i);
output;
end;
run;

proc print data=cmbcol ;
title 'cmbcol';
run;

proc sort data=cmbcol;
by orig_varname a;
run;

proc print data=cmbcol noobs;
title 'cmbcol';
run;

我希望他们变成这样。

ID  t  t+1  
1   1   2    
2   1   2    
3   1   2 
4   1   2   
5   1   2  
1   2   3
2   2   3
3   2   3
4   2   3
5   2   3
1   3   4
2   3   4
3   3   4
4   3   4
5   3   4

我们该怎么做?

提前致谢。

【问题讨论】:

  • 这里的想法是帮助人们编写代码而不是实际工作。请向我们展示一些代码,以便人们可以帮助您。
  • 这是一个非常奇怪的结构。查看转置以获取您的 t 列,然后您可以使用几种方法来生成您的前导 (t+1) 变量。这里有多种解决方案。如前所述,尝试一些东西,然后有人会帮助编写代码。
  • 对不起。我编辑帖子。谢谢提醒。

标签: sas dataset jointable


【解决方案1】:

这肯定是一个不寻常的数据结构,但您可以使用以下宏来实现这一点(根据您的需要进行调整)。

options validvarname = any;

%macro transp;
  %let i = 2009;
  %do %while (&i <= 2011);
    %let j = %eval(&i + 1);
    data part_&i(rename = (A&i = t A&j = 't+1'n));
      set multcol(keep =  ID A&i A&j);
    run;
    %let i = %eval(&i + 1);
  %end;

  data combined;
    set part_:;
  run;

  proc datasets nolist nodetails;
    delete part_:;
  quit;
%mend transp;

%transp

【讨论】:

  • 非常感谢!!!!有用!!!我从你的答案中学到了很多,我也学习了如何扩展它。再次感谢您!
  • 很高兴它对您有用。感谢您的反馈,我也从人们的问题中学习! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
相关资源
最近更新 更多