gpt4 book ai didi

arrays - SAS:使用数组转置表

转载 作者:行者123 更新时间:2023-12-01 14:46:35 25 4
gpt4 key购买 nike

我正在尝试重新创建一些与 http://support.sas.com/resources/papers/proceedings10/158-2010.pdf 上的第 9-10 页相反的代码.因此,我不想让一张 table 从宽变长,而是让它从长变宽。

Id Col1  Col2     
1 Val1 A
1 Val2 B
2 Val1 C
2 Val3 D
3 Val2 E

转换为:

Id X_Val1 X_Val2 X_Val3  
1 A B .
2 C . D
3 . . E

关于我应该如何处理这件事有什么想法吗?我知道我应该使用数组并尝试创建一个新列 X_Val1,其中 X_Val1 = cat('X',Val1) 其中 X 是某个字符串。

最佳答案

您需要先弄清楚您需要多少个变量。然后您可以创建变量、使用数组并分配值。

data test;
input id col1 $ col2 $;
datalines;
1 Val1 A
1 Val2 B
2 Val3 C
2 Val4 D
2 Val5 E
;
run;

/*Need to get the number of variables that need to be created*/
proc sql noprint;
select max(c)
into :arr_size
from
( select ID, count(*) as c
from test
group by id
);
quit;

/*Get rid of leading spaces*/
%let arr_size=%left(&arr_size);
%put &arr_size;

data test_t;
set test;
by id;
/*Create the variables*/
format SOME_X1 - SOME_X&arr_size $8.;
/*Create an array*/
array SOME_X[&arr_size];

/*Retain the values*/
retain count SOME_X:;

if first.id then do;
count = 0;
do i=1 to &arr_size;
SOME_X[i] = "";
end;
end;

count = count + 1;
SOME_X[count] = col2;

if last.id then
output;

keep id SOME_X:;
run;

关于arrays - SAS:使用数组转置表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19441358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com