假设我有两列A和B列。
A B
12 "randstr"
39 "randstr"
2 "randstr"
每行重复此随机字符串。
我对如何获得下表感兴趣:
randstr B
12 "randstr"
39 "randstr"
2 "randstr"
B列中的值用于重命名A列。我尝试使用rename
和各种宏魔法但失败了。我不知道如何继续。
我已尝试过以下答案,他们只是不允许从数据中读取值,然后将值用作列名:
答案 0 :(得分:1)
这种转变也可以看作是一种逐行转换。
data have;
attrib A length=8 B length=$32;
row+1;
input
A & B; datalines;
12 xyz-123-abc
39 xyz-123-abc
2 xyz-123-abc
run;
proc transpose data=have out=want(drop=row _name_);
by row;
var A;
id B;
copy B;
run;
在非玩具场景中,B
列通常不是单个值。尝试使用B
变体的数据进行相同的转置。该过程将根据B
的值创建两个新列。
A & B; datalines;
12 xyz-123-abc
39 xyz-123-abc
2 xyz-123-abc
3141 xyz-456-def
答案 1 :(得分:0)
使用此macro,它非常简单:
/* get first value in the dataset */
%let new_col=%mf_getvalue(work.YOURDATA,B);
/* rename variable A */
proc datasets library=work nolist;
modify YOURDATA;
rename A=%sysfunc(dequote(&new_col));
quit;