0

自学 SAS 用户在这里。

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

我通常使用 infile 语句以 CSV 格式读取文件 + 使用 informat、format 和 input 语句块定义变量。在此过程中,我是否可以继续重命名变量——前提是所有内容都以正确的顺序重命名——或者它们是否必须与原始数据集匹配并在以后的数据步骤中重命名?

例如,数据集中的变量名称是“100% 全额支付”。我知道 SAS 变量不能以数字开头,而且我也想在一般情况下简化变量名称,所以我可以执行以下操作:

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

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

编辑

也许我应该问的问题是:有什么方法可以保留美元和百分比的 csv 格式(通过 proc 导入,这似乎将这些转换为字符)?我知道我可以在导入文件之前在 Excel 中手动将格式从美元/百分比更改为“一般”,但我更愿意避免额外的手动步骤,而且因为我确实希望将这些保留为美元和百分比。还是我最好执行 informat/format/input 来指定 csv 的数据类型,以便以我希望的方式读取变量?

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

4

1 回答 1

2

CSV 文件不包含有关变量类型的任何元数据,正如您关于尝试将它们导入 Excel 的注释所示。您可以使用 PROC IMPORT 让 SAS 对如何读取它们进行有根据的猜测,但答案可能因文件而异,具体取决于碰巧出现的特定数据值。

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

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

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

length paid $3 date amount 8 ;

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

informat date mmddyy. amount dollar. ;

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

format date yymmdd10. ;

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

input paid -- amount ;
于 2017-02-10T15:47:49.693 回答