Sas 设置数据集内所有字符变量的长度

Sas 设置数据集内所有字符变量的长度,sas,Sas,我有一个SAS数据集,我们称之为a。它既有数字变量也有字符变量。我希望将所有字符变量的长度设置为300。我该怎么做?我尝试了数组,但没有成功。提前感谢。一旦有了数据集,就不能更改变量定义。但是,您可以使用数据集的元数据生成代码,以创建具有不同设置的新数据集。如果您不关心变量的顺序,那么只需将名称拉入一个空格分隔的列表,并在LENGTH语句中使用它 proc sql noprint; select name into :names separated by ' ' from diction

我有一个SAS数据集,我们称之为a。它既有数字变量也有字符变量。我希望将所有字符变量的长度设置为300。我该怎么做?我尝试了数组,但没有成功。提前感谢。

一旦有了数据集,就不能更改变量定义。但是,您可以使用数据集的元数据生成代码,以创建具有不同设置的新数据集。如果您不关心变量的顺序,那么只需将名称拉入一个空格分隔的列表,并在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;

一旦有了数据集,就不能更改变量定义。但是,您可以使用数据集的元数据生成代码,以创建具有不同设置的新数据集。如果您不关心变量的顺序,那么只需将名称拉入一个空格分隔的列表,并在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;