2014-09-17 5 views
0

Im используя следующий цикл для генерации сумм некоторых столбцов с использованием класса:Изменения макропеременной в цикле 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 

The имена столбцов я хочу использовать в качестве класса «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_ _2015" вместо этого. Я отметил строку, где я пытался изменить это. К сожалению, это не работает. Может кто-нибудь сказать мне, почему и предложить решение?

Заранее спасибо.

ответ

3

Альтернативой ответ Григория является использование putn и формат z2., например,

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

Что вы можете сделать, это всегда добавляет «0», а затем взять только последние 2 символа вашей строки:

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

Затем макрос назначает переменную «C_ZE_RISIKO_95_2014 _ ** G1 ** _ 2015» !? – burton030

+0

Синтаксис был некорректным (% string1 вместо & string1), я отредактировал правильный синтаксис. –

 Смежные вопросы

  • Нет связанных вопросов^_^