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