我在SAS上有以下配置的表格,但有更多变量:
date var12 var41
2013M8 -25.6 -30
2013M9 -24.5 -27.3
2013M10 -26.4 -25.7
2013M11 -32.6 -29.2
2013M12 -30.7 -27.3
2014M01 -29.2 -30.3
我试图像这样说出来:
var12(t0) var12(t-1) var12(t-2) var41(t0) var41(t-1) var41(t-2)
-29.2 -30.7 -32.6 -30.3 -27.3 -29.2
-30.7 -32.6 -26.4 -27.3 -29.2 -25.7
-32.6 -26.4 -24.5 -29.2 -25.7 -27.3
-26.4 -24.5 -25.6 -25.7 -27.3 -30
这是自动回归的一部分,其中有一个案例转换。我已经检查了互联网如何做到这一点,但到目前为止还没有取得很好的成功。
请不要我没有尝试进行自动回归,只是转换数据以便稍后应用方法。
干杯。
答案 0 :(得分:3)
并排合并可以有效地完成这项工作。基本上你只需要使用相同的数据集3次,但其中有两次使用FIRSTOBS切断第一行或前两行(因此它从第2行或第3行开始)。你使用重命名,这样变量就不会相互覆盖,你就去了。
没有BY语句的合并称为并排合并,只需从每个数据集中取一行,然后移动到每个数据集的下一行。
data have;
input date $ var12 var41;
datalines;
2013M8 -25.6 -30
2013M9 -24.5 -27.3
2013M10 -26.4 -25.7
2013M11 -32.6 -29.2
2013M12 -30.7 -27.3
2014M01 -29.2 -30.3
;;;;
run;
data want;
merge have(rename=(var12=var12_t2 var41=var41_t2) in=h1)
have(firstobs=2 rename=(var12=var12_t1 var41=var41_t1) in=h2)
have(firstobs=3 rename=(var12=var12_t0 var41=var41_t0) in=h3);
if h1 and h2 and h3;
run;
如果您有一个BY组(如ID),您可能需要对其进行操作以使其正常工作。
答案 1 :(得分:0)
经过一段时间后,我做了以下事情:
data have;
input date $ var12 var41;
datalines;
2013M8 -25.6 -30
2013M9 -24.5 -27.3
2013M10 -26.4 -25.7
2013M11 -32.6 -29.2
2013M12 -30.7 -27.3
2014M01 -29.2 -30.3
;;;;
run;
/ 我们更改日期 /
data a_want;
set have;
nouv_date=mdy(substr(date,6,2),01,substr(date,1,4));
format nouv_date monyy5.;
drop date;
run;
/我们为a1到a6 /
做这件事data a1; set a_want;
run;
/我们为a1到a6 /
做这件事data a6;
set a5;
proc sql;
delete from a6 where nouv_date=(select max(nouv_date) from a6);
quit;
data a;
merge a1(rename=(var12=var12_t0 var41=var41_t_0))
a2(rename=(var12=var12_t_1 var41=var41_t_1))
a3(rename=(var12=var12_t_2 var41=var41_t_2))
a4(rename=(var12=var12_t_3 var41=var41_t_3))
a5(rename=(var12=var12_t_4 var41=var41_t_4))
a6(rename=(var12=var12_t_5 var41=var41_t_5));
by nouv_date;
run;
我想把它放在那里,万一有人会看一看。这与我第一手的问题有点不同,但无论如何。我希望它会有所帮助。
你可以想象,它的某些部分仍然需要自动化,但它是不同的部分。
也许不是最优雅的,但是我在你的帮助下一点一点地做了,特别是你,乔。
干杯。
PS:我知道这不是很有效但是长篇故事