对于我们的分析,我们需要从 csv (xls) 读取原始数据并将其转换为 SAS 数据集,然后再进行分析。
现在,问题是这些原始数据通常有两个问题: 1. 列的顺序有时会发生变化。因此,如果在早期我们有按变量顺序排列的列 A,然后是 B,然后是 C,等等。它可能会变为 B,然后是 C,然后是 A。 2. 有诸如“#”或“”之类的外来元素。 ”,或“一些字母”等。现在,我们必须先清理原始数据,然后再读入 SAS。这需要相当长的时间。有什么方法可以在读取数据之前清理 SAS 系统本身的数据。如果我们可以用 SAS 代码对数据进行校正,那将节省相当多的时间。
这是示例:
第 1 阶段:我以这种格式获取 Data1.csv 中的数据。在数字列 B 中,我有“#”和“.”。还有C列,也是数字,我有“g”。如果我使用 PROC IMPORT 或 Infile 语句导入 Data1.csv,则 B & C 列中的这些外来元素将保留。这里的问题是如何做到这一点?我可以使用 If STATEMENT。但问题是外来元素太多(例如,不是“#”、“.”、“g”,我可能会得到其他外来元素,如“$”、“h”等)如果有什么办法可以每次在 SAS 中导入原始数据时,我都无需使用 IF STATEMENT 指定它来检测和删除外来元素的代码。
A B C
Name1 1 5
Name2 2 6
Name3 3 4
Name4 # g
Name5 5 3
Name6 . 6
第 2 期:在此期间,我得到了 DATA2.csv,如下所示。当我使用 INFILE 语句时,我指定应使用特定名称读取第一个 A,然后使用特定名称读取 B,然后是 C。在第二个周期中,当我获得数据时,B 被赋予第一个。因此,当 SAS 读取数据时,我使用的是 B 而不是 A。所以,我必须每次都检查变量与前一阶段数据的顺序并在使用 infile 语句读取数据之前对其进行更正。由于变量的数量太大,以这种方式验证列排序非常耗时(有时令人沮丧)。是否有 SAS 代码,SAS 会自动读取 A,然后是 B,然后是 C,即使它不是这个顺序?
B A C
1 Name1 5
2 Name2 6
3 Name3 4
# Name4 g
5 Name5 3
. Name6 6
尽管我主要在分析目的中使用 SAS。但我可以使用 R 来清理数据,然后在 SAS 中读取数据以进行进一步分析。所以 R 代码也很有帮助。
谢谢。