Sas 使用数据表中的值命名列
假设我有两列A和BSas 使用数据表中的值命名列,sas,Sas,假设我有两列A和B A B 12 "randstr" 39 "randstr" 2 "randstr" 此随机字符串在每行中重复 我对如何获得下表感兴趣: randstr B 12 "randstr" 39 "randstr" 2 "randstr" B列中的值用于重命名A列。我尝试过使用rename和各种宏魔术,但失败了。我不知道如何进行 我尝试了以下答案,但它们不允许从数据中读取值,然后将该值用作
A B
12 "randstr"
39 "randstr"
2 "randstr"
此随机字符串在每行中重复
我对如何获得下表感兴趣:
randstr B
12 "randstr"
39 "randstr"
2 "randstr"
B列中的值用于重命名A列。我尝试过使用rename
和各种宏魔术,但失败了。我不知道如何进行
我尝试了以下答案,但它们不允许从数据中读取值,然后将该值用作列名:
使用此方法,它相当简单:
/* 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;
这种转换也可以看作是一种逐行换位
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
这是一个家庭作业问题吗,这不是我今天第一次看到它/无论如何,你在寻找如何创建一个格式。谷歌发表了一篇名为:PROC FORMAT的论文,不仅是另一张漂亮的脸,它还有一些非常好的例子。如果你想要真正的代码帮助,你的问题不符合规则,你需要展示你尝试了什么,而不仅仅是说你尝试了什么。@Reeza我很确定PROC FORMAT不会起作用。字符串是随机的,我不能列出所有的值。我已经添加了3个我尝试过的答案。这也不是家庭作业,我在工作中做这件事,刚刚开始玩宏,我想可能有办法。你能把我和你反复看到的问题联系起来吗?行!正是我所需要的。谢谢