Macros DO循环中宏变量的更改
Im使用以下循环使用class语句生成某些列的和:Macros DO循环中宏变量的更改,macros,sas,do-loops,Macros,Sas,Do Loops,Im使用以下循环使用class语句生成某些列的和: %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;
%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_95_05\u 2015”。我在试图改变这一点的地方做了标记。不幸的是,这不起作用。有人能告诉我原因并提出解决方案吗
提前感谢。您可以做的是始终先附加“0”,然后只提取字符串的最后两个字符:
%let string1 = "0".%eval(100-&i);
%let string1 = %substr(&string1,%length(&string1)-1);
您可以做的是始终先附加“0”,然后只提取字符串的最后2个字符:
%let string1 = "0".%eval(100-&i);
%let string1 = %substr(&string1,%length(&string1)-1);
您可以做的是始终先附加“0”,然后只提取字符串的最后2个字符:
%let string1 = "0".%eval(100-&i);
%let string1 = %substr(&string1,%length(&string1)-1);
您可以做的是始终先附加“0”,然后只提取字符串的最后2个字符:
%let string1 = "0".%eval(100-&i);
%let string1 = %substr(&string1,%length(&string1)-1);
Gregory回答的另一种方法是使用
putn
和z2.
格式,例如
%LET STRING1 = %SYSFUNC(putn(%EVAL(100-&I),z2.)) ;
%设STRING1=%SYSFUNC(putn(%EVAL(100-&I),z2.);
Gregory回答的另一种方法是使用
putn
和z2.
格式,例如
%LET STRING1 = %SYSFUNC(putn(%EVAL(100-&I),z2.)) ;
%设STRING1=%SYSFUNC(putn(%EVAL(100-&I),z2.);
Gregory回答的另一种方法是使用
putn
和z2.
格式,例如
%LET STRING1 = %SYSFUNC(putn(%EVAL(100-&I),z2.)) ;
%设STRING1=%SYSFUNC(putn(%EVAL(100-&I),z2.);
Gregory回答的另一种方法是使用
putn
和z2.
格式,例如
%LET STRING1 = %SYSFUNC(putn(%EVAL(100-&I),z2.)) ;
%设STRING1=%SYSFUNC(putn(%EVAL(100-&I),z2.);
然后宏指定变量“C_ZE_RISIKO_95_2014_G1_2015”!?语法不正确(%string1而不是&string1),我已编辑为正确的语法。然后宏会分配变量“C_ZE_RISIKO_95_2014_G1_2015”!?语法不正确(%string1而不是&string1),我已编辑为正确的语法。然后宏会分配变量“C_ZE_RISIKO_95_2014_G1_2015”!?语法不正确(%string1而不是&string1),我已编辑为正确的语法。然后宏会分配变量“C_ZE_RISIKO_95_2014_G1_2015”!?语法不正确(%string1而不是&string1),我已编辑为正确的语法。