我在SAS中工作,想要更改多列的类型和格式。例如,有些我想将其转换为格式长度为3的数字变量,而另一些人希望将其转换为格式长度为41的字符变量。
当前,我正在创建一列并指定我想要的格式。然后,我将原始列中的数据复制到新列中,以便采用新格式。
以下是代码:
DATA CAUSE1;
SET Temp.MstCause;
FORMAT CauseDescrs $CHAR30.;
CauseDescrs = CauseDescr;
Drop CauseDescr;
RUN;
DATA CAUSE;
SET CAUSE1;
FORMAT CauseDescr $41.;
CauseDescr = CauseDescrs;
Drop CauseDescrs;
RUN;
有人知道格式化列的更有效的方法吗?
答案 0 :(得分:0)
最快的方法通常是proc datasets
,例如:
proc datasets lib = temp;
modify mstcause;
format causedescr $char30. anothervar 8.; /*...add more variables & formats here*/
run;
quit;
您还可以在处理数据时应用格式,例如通过向proc means
或其他一些统计过程中添加格式语句。
答案 1 :(得分:0)
如果要更改变量 type 或 length ,而不仅仅是更改应用格式,则必须使用数据步骤和赋值。您不必使用两个数据步骤,但这是不必要的。如果这是一个中间步骤(即不是最终的可交付文件),则可以使用数据步骤视图。
我通常这样做的方式是这样的:
*Change character to numeric;
data want;
set have(rename=var=var_c);
var = input(var_c,informat.);
run;
*Increase length of character variable;
data want;
length var $40;
set have;
run;
如果仅更改 format 而不是 length ,则可以在proc datasets
中进行更改。它可以更改大多数数据集元数据,但不能更改实际存储的长度(这需要重写整个数据集)。我怀疑那是您在上面的示例中所做的(因为您正在使用默认格式并对其进行增加);您可能正在更改 length 。
请注意,字符变量的 length 是可以存储的字符数;而 format 控制着它在屏幕上的显示方式(而不是存储的内容)。将格式应用于先前未声明的变量会将其长度设置为该格式的长度,但是长度和格式是两个最不相关的东西。