Значение макропеременной как длина другой переменной?

Я новичок в 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;
Другие вопросы по тегам