在DO循环中更改宏变量

时间:2014-09-17 14:48:56

标签: macros sas do-loops

我使用以下循环使用类语句生成一些列的总和:

%macro do_mean;

%do i = 50 %to 100;

%let string1 = %eval(100-&i);

**%if string1 = 5 %then %let string1 = "05";**

%if &i = 95 or &i = 90 or &i = 80 or &i = 70 or &i = 60 or &i = 50 %then %do;

proc means data = risiko.risiko_Haus sum nway noprint; 

var  HA_Max_Neg HA_Max_Pers;

class C_ze_Risiko_&i._2014_&string1._2015;

output out=test_ze_Risiko_&i._2014_&string1._2015 (drop=_type_ _freq_)

sum=C_Risiko_&i._2014_05_2015_Max_Neg C_Risiko_&string1._2014_05_2015_Max_Per;

run;

%end;

%end;

%mend do_mean;

%do_mean;here

我想用作类的名称列是“C_ze_Risiko_50_2014_50_2015”“C_ze_Risiko_60_2014_40_2015”等等。

不幸的是,代码会生成“C_ZE_RISIKO_95_2014_5_2015”,但我需要“C_ZE_RISIKO_95_2014_ 05 _2015”。我标记了我试图改变这一点的路线。不幸的是,这不起作用。有人可以告诉我为什么并提出解决方案吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

格雷戈里答案的替代方法是使用putnz2.格式,例如

%LET STRING1 = %SYSFUNC(putn(%EVAL(100-&I),z2.)) ;

答案 1 :(得分:0)

你可以做的是首先追加“0”然后只取你字符串的最后2个字符:

%let string1 = "0".%eval(100-&i);
%let string1 = %substr(&string1,%length(&string1)-1);