SAS中文论坛
标题:
如何将变量的标签作为数据的第一行?
[打印本页]
作者:
shiyiming
时间:
2012-6-1 22:55
标题:
如何将变量的标签作为数据的第一行?
比如
a b c 变量名
1 abc 10
2 cde 11
3 cd 12
数据集为3行 其中a b c 的标签是id name value
想得到的数据集为
a b c 变量名
id name value
1 abc 10
2 cde 11
3 cd 12
数据集为4行
如果变量没有指定标签,用变量名代替。
谢谢!
作者:
shiyiming
时间:
2012-6-2 03:35
标题:
Re: 如何将变量的标签作为数据的第一行?
[code:25emd5wy]
data ads;
input a $ b $ c $;
label a='id'
/* b='name'*/
c='value';
cards;
1 abc 10
2 cde 11
3 cd 12
;
proc contents data=ads out=bds noprint;
run;
data cds;
set bds;
if missing(label)then label=name;
keep label;
run;
proc transpose data=cds out=dds (rename=(col1=a col2=b col3=c) keep=col1 col2 col3);
var label;
run;
data eds;
set dds ads;
run;
[/code:25emd5wy]
作者:
shiyiming
时间:
2012-6-4 14:50
标题:
Re: 如何将变量的标签作为数据的第一行?
[code:m6fpeal9]/*假设你的源表名为a*/
%macro Label2Data;
data result;
%local dsid nvar rc vname vlabel i;
%let dsid=%sysfunc(open(a));
%let nvar=%sysfunc(attrn(&dsid,nvars));
%do i=1 %to &nvar;
%let vname=%sysfunc(varname(&dsid,&i));
%let vlabel=%qsysfunc(varlabel(&dsid,&i));
length &vname $256;
%if &vlabel eq %then %do;&vname="&vname";%end;
%else %if %index(&vlabel,%str(%")) %then %do;&vname=%unquote(%str(%')&vlabel%str(%'));%end;
%else %do;&vname="&vlabel"; %end;
%end;
%let rc=%sysfunc(close(&dsid));
run;
data result;
set result a;
run;
%mend Label2Data;
%Label2Data;
[/code:m6fpeal9]
作者:
shiyiming
时间:
2012-6-7 15:22
标题:
Re: 如何将变量的标签作为数据的第一行?
如果数据集中有数值型变量,如何使顺序不变,实现将变量的标签作为数据的第一行要求?谢谢!
作者:
shiyiming
时间:
2012-6-7 23:09
标题:
Re: 如何将变量的标签作为数据的第一行?
在sas数据集中,同一个变量的观测只能有一个属性,数值,字符,等。
你给出的例子中,标签是字符型的,所以,在我给出的程序中,把变量的
观测值都定义成字符型。如果定义成数值型,结果会有很多缺失值,你可以
试着改变一下程序,看看是否是这样的。
欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/)
Powered by Discuz! X3.2