自学成才的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位计算机上也无法做到这一点。
答案 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 ;