首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SAS:使用数组转置表

SAS:使用数组转置表
EN

Stack Overflow用户
提问于 2013-10-18 04:01:30
回答 2查看 2.5K关注 0票数 3

我正在尝试重新创建一些代码,它与http://support.sas.com/resources/papers/proceedings10/158-2010.pdf上的第9-10页中的代码相反。所以,我不想让桌子从宽到长,我希望它从长到宽。

代码语言:javascript
运行
复制
Id Col1  Col2     
1  Val1  A    
1  Val2  B    
2  Val1  C    
2  Val3  D  
3  Val2  E 

转到:

代码语言:javascript
运行
复制
Id X_Val1 X_Val2 X_Val3  
1  A      B      .
2  C      .      D
3  .      .      E

对我该怎么做有什么想法吗?我知道我应该使用一个数组,并尝试创建一个新列X_Val1,其中X_Val1 = cat('X',Val1),其中X是一些字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 04:48:57

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

代码语言:javascript
运行
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2013-10-18 19:12:38

我不知道你为什么要用PROC TRANSPOSE以外的任何东西来做这件事。

代码语言:javascript
运行
复制
proc transpose data=have out=want prefix='X_';
by id;
id col1;
var col2;
run;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19441358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档