用SAS进行大小写转换

时间:2014-05-07 15:12:14

标签: sas

我在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

这是自动回归的一部分,其中有一个案例转换。我已经检查了互联网如何做到这一点,但到目前为止还没有取得很好的成功。

请不要我没有尝试进行自动回归,只是转换数据以便稍后应用方法。

干杯。

2 个答案:

答案 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:我知道这不是很有效但是长篇故事