|
|
板凳

楼主 |
发表于 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(&inds_raw,i));
%let var_n=%sysfunc(attrn(&dsid_raw,nvars));
%do i=1 %to &var_n;
%let var_name=%sysfunc(varname(&dsid_raw,&i));
/* 获取变量名的数字后缀 */
%let var_num_suffix=;
%let j=1;
%let temp=%substr(%sysfunc(reverse(&var_name)),&j,1);
%do %while(&temp>=0 and &temp<=9);
%let var_num_suffix=&temp&var_num_suffix;
%let j=%eval(&j+1);
%let temp=%substr(%sysfunc(reverse(&var_name)),&j,1);
%end;
/* 创建变量标签 */
%if &var_num_suffix ne %then %do;
%let dsid_label=%sysfunc(open(&inds_label,i));
%let rc=%sysfunc(fetchobs(&dsid_label,&var_num_suffix));
%if &rc=-1 %then %put ERROR- ****** 变量“%upcase(&var_name)”的后缀文本不存在!******;
%else %do;
%let var_label=%sysfunc(getvarc(&dsid_label,%sysfunc(varnum(&dsid_label,&label))));
%let var_char_prefix=%substr(&var_name,1,%eval(%length(&var_name)-%length(&var_num_suffix)));
label &var_name="&var_char_prefix&var_label";
%end;
%let rc=%sysfunc(close(&dsid_label));
%end;
%else %put WARNING- ****** 变量“%upcase(&var_name)”未创建标签。******;
%end;
%let rc=%sysfunc(close(&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] |
|