输入期间SAS重命名变量

时间:2017-02-10 15:33:07

标签: file-io import sas renaming informat

自学成才的SAS用户。

我经常使用我几乎无法控制的数据集,并在几个不同的用户之间共享。

我通常使用infile语句将文件读取为CSV文件+使用信息块,格式和输入语句块定义变量。在此过程中,我可以继续重命名变量 - 假设所有内容都按正确的顺序重命名 - 或者它们是否必须与原始数据集匹配并在以后的数据步骤中重命名?

例如,数据集中的变量名称为“100%完全付款”。我知道SAS变量不能以数字开头,我也想简化一般的变量名,所以我可以这样做:

infile statement...
informat Paid $3.;
format Paid $3.;
input Paid $;
run;

或者也许我的效率非常低。我已经尝试过没有这整个信息/格式/输入业务的简单proc导入,但是我发现尝试重新定义变量类型之后会让我更加头疼(我使用的所有数据集都有文本,美元,百分比,一般数字,日期......)。在任何情况下,其他提示高度赞赏 - 谢谢!

修改

也许我应该问的问题是:有没有办法保持csv的格式为美元和百分比(通过proc导入,似乎将这些转换为字符)?我知道我可以在导入文件之前手动将格式从美元/百分比更改为Excel中的“常规”,但我更愿意避免使用其他手动步骤,也因为我确实希望将这些格式保留为美元和百分比。或者我最好做信息/格式/输入以指定csv的数据类型,以便准确读取变量我希望它们被读入的方式?

注意:我无法处理导入xls或xlsx文件,因为我使用的是64位计算机和/或我缺少必需的驱动程序(或两者兼而有之)。即使在32位计算机上也无法做到这一点。

1 个答案:

答案 0 :(得分:2)

CSV文件不包含有关变量类型的任何元数据,因为有关尝试将其导入Excel的说明。您可以使用PROC IMPORT让SAS对如何阅读它们进行有根据的猜测,但根据恰好出现的特定数据值,答案可能因文件而异。

如果您有XLS或XLSX文件中的数据,您应该能够使用带有XLS或XLSX引擎的libname将它们直接读入SAS。这不使用Excel,因此在32和64安装之间没有任何冲突。实际上你甚至不需要安装Excel。 SAS将比从CSV文件更好地确定Excel文件中的变量类型,但由于Excel是一个自由格式的电子表格,因此对于多个文件中的同一变量,您可能仍然没有一致的变量类型。使用Excel电子表格,您甚至可能在单个工作表的单个列中始终具有相同的数据类型。

您最好编写自己的数据步骤来读取文件。这样你就可以强制实现一致性。

给定CSV文件时我通常会复制第一行中的名称并使用它来创建LENGTH语句。这将定义变量并设置变量的顺序。此时,您可以为变量赋予新名称。

length paid $3 date amount 8 ;

然后,对于需要正确读取INFORMAT的变量,我添加INFORMAT语句。通常只需要日期/时间变量,但如果数值包含逗号或百分号,则可能还需要它。如果您的CSV文件的数字格式为$和/或千位分隔符,则DOLLAR.信息非常有用。

informat date mmddyy. amount dollar. ;

然后,对于需要正确显示FORMAT的变量,我添加FORMAT语句。通常只需要日期/时间变量。如果要附加$ CHAR,则只需要字符变量。格式以保留前导空格。

format date yymmdd10. ;

然后INPUT语句非常简单,因为您可以使用位置变量列表。请注意,由于类型已由LENGTH语句定义,因此无需在INPUT语句中包含informats或$。

input paid -- amount ;