SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1237|回复: 3
打印 上一主题 下一主题

请教:给变量添加label时怎么设置条件语句?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-9-4 18:11:02 | 只看该作者

请教:给变量添加label时怎么设置条件语句?

又向版上的大侠请教问题了,不知道能不能根据某个条件实现对变量批量加label?
比如有变量var1-var100,我想把变量后缀的数字都用对应的代码来代替,除了attrib 一个一个变量定义,还有其他程序可以实现吗? 谢谢!!!
var1 -varApple
var2-varBanana
Var3-varCat
.....
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-9-4 20:49:16 | 只看该作者

Re: 请教:给变量添加label时怎么设置条件语句?

如果你的变量LABLE根本没有规律,实现自动化就没有多大的意义。一个做建议的小程序如下:

[code:3h7vjye2]%macro labelmcr;
        label
        %do i=1 %to 3;
                %let label=%scan(&labels, &i);
                var&i="var&label"
        %end;
%mend labelMcr;

%let labels=apple banana cat;

data Labelled;
        input var1 var2 var3;
        %labelmcr
        ;
cards;
1 2 3
;
run;[/code:3h7vjye2]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-9-4 23:05:33 | 只看该作者

Re: 请教:给变量添加label时怎么设置条件语句?

<!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->  我把简单问题复杂化了
[code:3bg8f8ou]%macro create_var_label(inds_raw,inds_label,label=label);
        options nosymbolgen nomprint;
        /* 获取原始数据集的变量名 */
        %let dsid_raw=%sysfunc(open(&amp;inds_raw,i));
        %let var_n=%sysfunc(attrn(&amp;dsid_raw,nvars));
        %do i=1 %to &amp;var_n;
                %let var_name=%sysfunc(varname(&amp;dsid_raw,&amp;i));
                /* 获取变量名的数字后缀 */
                %let var_num_suffix=;
                %let j=1;
                %let temp=%substr(%sysfunc(reverse(&amp;var_name)),&amp;j,1);
                %do %while(&amp;temp&gt;=0 and &amp;temp&lt;=9);
                        %let var_num_suffix=&amp;temp&amp;var_num_suffix;
                        %let j=%eval(&amp;j+1);
                        %let temp=%substr(%sysfunc(reverse(&amp;var_name)),&amp;j,1);
                %end;
                /* 创建变量标签 */
                %if &amp;var_num_suffix ne %then %do;
                        %let dsid_label=%sysfunc(open(&amp;inds_label,i));
                        %let rc=%sysfunc(fetchobs(&amp;dsid_label,&amp;var_num_suffix));
                        %if &amp;rc=-1 %then %put ERROR-   ****** 变量“%upcase(&amp;var_name)”的后缀文本不存在!******;
                        %else %do;
                                        %let var_label=%sysfunc(getvarc(&amp;dsid_label,%sysfunc(varnum(&amp;dsid_label,&amp;label))));
                                        %let var_char_prefix=%substr(&amp;var_name,1,%eval(%length(&amp;var_name)-%length(&amp;var_num_suffix)));
                                        label &amp;var_name=&quot;&amp;var_char_prefix&amp;var_label&quot;;
                                %end;
                        %let rc=%sysfunc(close(&amp;dsid_label));
                %end;
                %else %put WARNING- ****** 变量“%upcase(&amp;var_name)”未创建标签。******;
        %end;
        %let rc=%sysfunc(close(&amp;dsid_raw));
%mend;

/* 需要创建变量标签的原始数据集 */
data raw;
        input id in1 out1 var2 var3 i4n5 ou4t15 var6;
datalines;
1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3
;

/* 变量标签的后缀文本 */
data color;
        input color $;
datalines;
Blue
Purple
Red
Orange
Yellow
Green
;

data final;
        set raw;
        %create_var_label(raw,color,label=color)
run;[/code:3bg8f8ou]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-9-7 16:54:26 | 只看该作者

Re: 请教:给变量添加label时怎么设置条件语句?

呵呵,因为常规性都要跑的,所以想实现自动化~

[quote=&quot;jingju11&quot;:3cru65xc]如果你的变量LABLE根本没有规律,实现自动化就没有多大的意义。一个做建议的小程序如下:[/quote:3cru65xc]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-5 23:14 , Processed in 0.113540 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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