宏变量的值是另一个变量的长度吗?

时间:2016-04-22 11:15:42

标签: macros sas variable-length

我是SAS的新手,并没有找到我的问题的答案。也许这个社区会/可能非常善良帮助我。

是否可以将宏变量的值定义为另一个变量的长度?我知道宏的值是字符,但是有办法吗?

我的问题是:我想检查我的变量是否为最长值,并将最长值的长度设置为变量的新长度。因此我使用了这个程序:

proc sql;

select max(length(variable))

into: length_variable

from dm_comp;
quit;

%put length_variable;

现在我在宏中有了作为角色的值,但我不知道如何使用此宏来设置新的长度。甚至可以这样做吗?如果没有,你知道如何做得更好吗?非常感谢你的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你走在正确的轨道上。您只需要正确格式化新变量:

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;