【发布时间】:2016-02-17 14:54:38
【问题描述】:
我有一个 SAS 数据集,我们称它为 A。它既有数字变量,也有字符变量。我希望将所有字符变量的长度设置为 300。我应该怎么做?我尝试了数组,它不起作用。提前谢谢你。
【问题讨论】:
标签: sas
我有一个 SAS 数据集,我们称它为 A。它既有数字变量,也有字符变量。我希望将所有字符变量的长度设置为 300。我应该怎么做?我尝试了数组,它不起作用。提前谢谢你。
【问题讨论】:
标签: sas
一旦有了数据集,就无法更改变量定义。但是您可以使用有关数据集的元数据来生成代码,以创建具有不同设置的新数据集。如果您不关心变量顺序,那么只需将名称拉入以空格分隔的列表并在 LENGTH 语句中使用它。
proc sql noprint;
select name into :names separated by ' '
from dictionary.columns where libname='WORK' and memname='A' and type='char'
;
quit;
data want;
length &names $300;
set A;
run;
如果您确实关心顺序,那么也包括数字变量。您可以通过将 VARNUM 填充到将被名称和长度列表覆盖的同一宏变量中来消除有关按未包含在 select 语句中的变量排序的警告。
proc sql noprint;
select varnum
, catx(' ',name,case when (type='char') then '$300' else '8' end)
into :names
, :names separated by ' '
from dictionary.columns where libname='WORK' and memname='A'
order by varnum
;
quit;
data want;
length &names ;
set A;
run;
【讨论】: