有没有办法使用Proc数据集更改变量的长度?

时间:2015-11-26 11:16:07

标签: sas

我有很多数据集和变量需要修改其属性。一切都工作正常除了以下实例我需要更改变量的长度:

data inputdset ;
  format inputvar $20. ;
  inputvar='ABCDEFGHIJKLMNOPQRST' ;
run ;

proc datasets lib=work nolist memtype=data ;
  modify inputdset ;
    attrib inputvar format=$50. length=50 ;
  run ;
quit ;

运行它会在日志中提供以下注释:

  

注意:LENGTH属性无法更改,因此会被忽略。   大段引用   注意:WORK.INPUTDSET.DATA修改成功。

...最终的inputvar格式为50美元。如预期的那样,但仍然有20的长度。有没有办法使用proc datasets增加这些情况的长度(如果长度可以增加到匹配format,甚至更好?)

3 个答案:

答案 0 :(得分:5)

说不,总是冒险,但我会尝试一下。 PROC DATASETS可以修改有关数据集的元数据,而不是存储在每条记录中的数据。更改变量的长度需要更改存储在该变量的每个记录中的值(截断它或将其加长并用空格填充)。因此,更改变量的长度需要重写整个数据集,这可以通过DATA步骤或PROC SQL完成,但不能通过PROC DATASETS完成。

答案 1 :(得分:1)

请注意,文档确实指定在限制和MODIFY语句下attrib语句不能更改Length。

https://support.sas.com/documentation/cdl/en/proc/68954/HTML/default/viewer.htm#n0ahh0eqtadmp3n1uwv55i2gyxiz.htm

  

MODIFY声明

     

更改SAS文件的属性,并通过使用从属语句,更改SAS文件中变量的属性。

     

限制:您无法使用ATTRIB语句中的LENGTH =选项更改变量的长度

答案 2 :(得分:0)

要更改数据集中列的长度,您必须使用新长度重建数据集。通常,您可以使用类似以下的datastep代码模式执行此操作(proc sql是另一种选择)。

data inputdset ;
  format inputvar $20. ;
  inputvar='ABCDEFGHIJKLMNOPQRST' ;
run ;

data inputdset;
length inputvar $ 50;
format inputvar $50.; * can change the format at the same time if you want;
set inputdset;
run;

此模式最常见的抱怨是inputvar现在将成为新数据集中的第一列。您可以通过正确列出length语句中的所有变量来更正此问题,以保留原始顺序。