我是SAS的新手,并没有找到我的问题的答案。也许这个社区会/可能非常善良帮助我。
是否可以将宏变量的值定义为另一个变量的长度?我知道宏的值是字符,但是有办法吗?
我的问题是:我想检查我的变量是否为最长值,并将最长值的长度设置为变量的新长度。因此我使用了这个程序:
proc sql;
select max(length(variable))
into: length_variable
from dm_comp;
quit;
%put length_variable;
现在我在宏中有了作为角色的值,但我不知道如何使用此宏来设置新的长度。甚至可以这样做吗?如果没有,你知道如何做得更好吗?非常感谢你的帮助。
答案 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;