如何在 SAS 中转置 table
How to transpose a table in SAS
我有以下 table:
ID
VAR1
VAR2
VAR3
VALID_FROM
VALID_TO
ABC1
0
0
1
01JAN2010
01JAN2011
ABC1
1
0
1
01JAN2011
01JAN2012
ABC2
0
0
1
01JAN2010
01JAN2011
ABC2
1
0
0
01JAN2011
01JAN2012
ABC2
0
0
0
01JAN2012
01JAN2013
我想像这样转置它:
ID
VAR
VALUE
VALID_FROM
VALID_TO
ABC1
VAR1
0
01JAN2010
01JAN2011
ABC1
VAR2
0
01JAN2010
01JAN2011
ABC1
VAR3
1
01JAN2010
01JAN2011
ABC1
VAR1
1
01JAN2011
01JAN2012
ABC1
VAR2
0
01JAN2011
01JAN2012
ABC1
VAR3
1
01JAN2011
01JAN2012
ABC2
VAR1
0
01JAN2010
01JAN2011
ABC2
VAR2
0
01JAN2010
01JAN2011
ABC2
VAR3
1
01JAN2010
01JAN2011
ABC2
VAR1
1
01JAN2011
01JAN2012
ABC2
VAR2
0
01JAN2011
01JAN2012
ABC2
VAR3
0
01JAN2011
01JAN2012
ABC2
VAR1
0
01JAN2012
01JAN2013
ABC2
VAR2
0
01JAN2012
01JAN2013
ABC2
VAR3
0
01JAN2012
01JAN2013
这是第一个 table 的可重现示例:
data have;
infile datalines delimiter=",";
input ID :. VAR1 VAR2 VAR3 VALID_FROM:date9. VALID_TO:date9.;
format VALID: date9.;
datalines;
ABC1,0,0,1,01JAN2010,01JAN2011
ABC1,1,0,1,01JAN2011,01JAN2012
ABC2,0,0,1,01JAN2010,01JAN2011
ABC2,1,0,0,01JAN2011,01JAN2012
ABC2,0,0,0,01JAN2012,01JAN2013
;
run;
作为 SAS 的新手,我真的不知道如何进行?阵列? proc 转置 ?
我会使用 PROC TRANSPOSE,但它也可以通过数据步骤完成。
proc transpose data=have out=want(rename=(col1=value)) name=var;
by id valid_:;
var var:;
run;
我有以下 table:
ID | VAR1 | VAR2 | VAR3 | VALID_FROM | VALID_TO |
---|---|---|---|---|---|
ABC1 | 0 | 0 | 1 | 01JAN2010 | 01JAN2011 |
ABC1 | 1 | 0 | 1 | 01JAN2011 | 01JAN2012 |
ABC2 | 0 | 0 | 1 | 01JAN2010 | 01JAN2011 |
ABC2 | 1 | 0 | 0 | 01JAN2011 | 01JAN2012 |
ABC2 | 0 | 0 | 0 | 01JAN2012 | 01JAN2013 |
我想像这样转置它:
ID | VAR | VALUE | VALID_FROM | VALID_TO |
---|---|---|---|---|
ABC1 | VAR1 | 0 | 01JAN2010 | 01JAN2011 |
ABC1 | VAR2 | 0 | 01JAN2010 | 01JAN2011 |
ABC1 | VAR3 | 1 | 01JAN2010 | 01JAN2011 |
ABC1 | VAR1 | 1 | 01JAN2011 | 01JAN2012 |
ABC1 | VAR2 | 0 | 01JAN2011 | 01JAN2012 |
ABC1 | VAR3 | 1 | 01JAN2011 | 01JAN2012 |
ABC2 | VAR1 | 0 | 01JAN2010 | 01JAN2011 |
ABC2 | VAR2 | 0 | 01JAN2010 | 01JAN2011 |
ABC2 | VAR3 | 1 | 01JAN2010 | 01JAN2011 |
ABC2 | VAR1 | 1 | 01JAN2011 | 01JAN2012 |
ABC2 | VAR2 | 0 | 01JAN2011 | 01JAN2012 |
ABC2 | VAR3 | 0 | 01JAN2011 | 01JAN2012 |
ABC2 | VAR1 | 0 | 01JAN2012 | 01JAN2013 |
ABC2 | VAR2 | 0 | 01JAN2012 | 01JAN2013 |
ABC2 | VAR3 | 0 | 01JAN2012 | 01JAN2013 |
这是第一个 table 的可重现示例:
data have;
infile datalines delimiter=",";
input ID :. VAR1 VAR2 VAR3 VALID_FROM:date9. VALID_TO:date9.;
format VALID: date9.;
datalines;
ABC1,0,0,1,01JAN2010,01JAN2011
ABC1,1,0,1,01JAN2011,01JAN2012
ABC2,0,0,1,01JAN2010,01JAN2011
ABC2,1,0,0,01JAN2011,01JAN2012
ABC2,0,0,0,01JAN2012,01JAN2013
;
run;
作为 SAS 的新手,我真的不知道如何进行?阵列? proc 转置 ?
我会使用 PROC TRANSPOSE,但它也可以通过数据步骤完成。
proc transpose data=have out=want(rename=(col1=value)) name=var;
by id valid_:;
var var:;
run;