SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1540|回复: 4
打印 上一主题 下一主题

如何将变量的标签作为数据的第一行?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-6-1 22:55:42 | 只看该作者

如何将变量的标签作为数据的第一行?

比如
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行

如果变量没有指定标签,用变量名代替。

谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-6-2 03:35:18 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-6-4 14:50:37 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-6-7 15:22:18 | 只看该作者

Re: 如何将变量的标签作为数据的第一行?

如果数据集中有数值型变量,如何使顺序不变,实现将变量的标签作为数据的第一行要求?谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2012-6-7 23:09:16 | 只看该作者

Re: 如何将变量的标签作为数据的第一行?

在sas数据集中,同一个变量的观测只能有一个属性,数值,字符,等。
你给出的例子中,标签是字符型的,所以,在我给出的程序中,把变量的
观测值都定义成字符型。如果定义成数值型,结果会有很多缺失值,你可以
试着改变一下程序,看看是否是这样的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-6 08:49 , Processed in 0.068641 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表