Значение макропеременной как длина другой переменной?
Я новичок в SAS и не нашел ответа на свой вопрос. Может быть, это сообщество будет / может быть так любезно, чтобы помочь мне.
Можно ли определить значение макропеременной как длину другой переменной? Я знаю, что значение макроса является символьным, но есть ли способ сделать это?
Моя проблема заключается в следующем: я хочу проверить свою переменную на самое длинное значение и установить длину самого длинного значения в качестве новой длины для переменной. Поэтому я использовал эту программу:
proc sql;
select max(length(variable))
into: length_variable
from dm_comp;
quit;
%put length_variable;
Теперь у меня есть значение как символ в моем макросе, но я не знаю, как использовать этот макрос, чтобы установить новую длину. Можно ли вообще так поступить? Если нет, у вас есть идея, как сделать это лучше? Большое спасибо за Вашу помощь.
2 ответа
Вы можете использовать шаг данных, чтобы переопределить переменную и заполнить ее из старого набора данных.
/*Data with variable length 10, only need 2*/
data temp;
length x $ 10;
x="1";
output;
x="11";
output;
run;
proc sql noprint;
select max(length(x))
into: length_variable
from temp;
quit;
/*Puts 2 as expected*/
%put &length_variable;
/*First define the variable and the new length,
Then "set" the Data step - rename the old variable.
Set the new variable to the old one (I strip whitespace here)*/
data temp(drop=x_old);
length x $ &length_variable;
set temp(rename=(x=x_old));
x = strip(x_old);
run;
/*CONTENTS Show us the new length*/
proc contents data=temp;
run;
Результаты
Alphabetic List of Variables and Attributes
# Variable Type Len
1 x Char 2
Вы на правильном пути. Вам просто нужно правильно отформатировать новую переменную:
proc sql;
select max(length(variable))
into: length_variable
from dm_comp;
quit;
proc sql;
create table dm_comp2 as select
*, your_var as resized_var format %sysfunc(strip(&length_variable.)).
from dm_comp;
quit;