我有很多数据集和变量需要修改其属性。一切都工作正常除了以下实例我需要更改变量的长度:
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
,甚至更好?)
答案 0 :(得分:5)
说不,总是冒险,但我会尝试一下。 PROC DATASETS可以修改有关数据集的元数据,而不是存储在每条记录中的数据。更改变量的长度需要更改存储在该变量的每个记录中的值(截断它或将其加长并用空格填充)。因此,更改变量的长度需要重写整个数据集,这可以通过DATA步骤或PROC SQL完成,但不能通过PROC DATASETS完成。
答案 1 :(得分:1)
请注意,文档确实指定在限制和MODIFY语句下attrib语句不能更改Length。
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语句中的所有变量来更正此问题,以保留原始顺序。