如何将变量名称及其值读入列中?

问题描述:

得到的变量及其值并将它们植入另一数据的列名使用SAS如何将变量名称及其值读入列中?

data 1 
var1 var2 var3 
1 2 3 
2 3 1 


data 2 
no var4 
1 var1= 1, var2= 2, var3=3 
2 var1=2, var2= 3, var3= 1 

我想数据1被转移到数据2

假设你不想硬编码变量名,下面的代码应该可以工作。

data have; 
input var1 var2 var3; 
cards; 
1 2 3 
2 3 1 
; 
run; 

data want; 
set have; 
length var4 $50; 
array vars{*} var1--var3; 
do i=1 to dim(vars); 
if i=1 then var4=cats(vname(vars{i}),"=",vars{i}); 
else call cats(var4,",",vname(vars{i}),"=",vars{i}); 
end; 
drop i; 
run; 

您是否在寻找像这一套?

DATA data1; 
INPUT var1 var2 var3; 
CARDS; 
1 2 3 
2 3 1 
; 
RUN; 

data data2; 
set data1; 
no=_N_; 
var11= catx("= ","var1",var1); 
var21= catx("= ","var2",var2); 
var31= catx("= ","var3",var3); 
var4= catx(", ",var11,var21,var31); 
drop var1 var2 var3 var11 var21 var31 ; 
run; 

简单一点的版本Keith的代码,避免了IF:

data have; 
input var1 var2 var3; 
cards; 
1 2 3 
2 3 1 
; 
run; 

data want; 
set have; 
array vars var1-var3; 
array varns $ varn1-varn3; 
do i = 1 to dim(vars); 
    varns[i] = cats(vname(vars[i]),'=',vars[i]); 
end; 
var4 = catx(',', of varns[*]); 
keep var4; 
run; 

如果你不想“知道”变量名,你可以使用一些魔法的文件。

filename FT49F001 dummy; 
data new; 
    set sashelp.class; 
    file FT49f001; 
    put (_all_)(+(-1) ', ' =) @; 
    length newvar $512; 
    newvar = substr(_file_,3); 
    put; 
    run; 
proc print; 
    run;