【发布时间】:2023-03-18 11:05:01
【问题描述】:
我有一个 .dat 文件,其中包含需要导入 SAS 数据集的数字。但是,我确实不需要需要大量信息,并且我只想要特定的数据行(例如,从第 1000 行开始,每 6 行,直到我有 100 个观察值)。我还需要一个基于第一行显示内容的唯一标识符。
例如,.dat 文件包含以下内容:
DATANOTREQUIRED
DATANOTREQUIRED
DATANOTREQUIRED
UPDATE AAA_1111111_Q_BBBBBB_0_1_#
123.4,
123.5,
124.0,
124.1
DATANOTREQUIRED
DATANOTREQUIRED
DATANOTREQUIRED
UPDATE AAA_1111111__Q_BBBBBB_0_2_#
125.1,
126.0,
127.1,
130.0
我希望最终的 SAS 数据集看起来像这样
Identifier | Value
X.1. | 124.1
X.2. | 130.0
我在 SAS 中使用 infile 并使用输入指向第 1000 行,但我卡住了,无法获得我想要的 SAS 数据集。 (根据以下贡献者更新代码)
data work.test;
infile '\\filepath\mydatasource.dat' dsd firstobs=1042 truncover;
input #8 ID :$40.
#4 Value1 :8.;
run;
但我现在看到的是标题行看起来不错,但第一个观察结果是 .相反,第一个数据值出现在第二个标题行。
ID | Value1
UPDATE AAA_1111111_Q_BBBBBB_0_1_# | .
UPDATE AAA_1111111__Q_BBBBBB_0_2_# | 124.1
【问题讨论】:
-
每个标题行之间的行数是否总是相同?您需要使用什么逻辑来构建您的唯一 ID?
-
是的,每个标题行之间的行数总是相同的。唯一 ID 的逻辑是这样的:始终以 X 开头,后跟标题行中的倒数第二个数字(在 UPDATE AAA_1111111_Q_BBBBBB_0_1_# 的情况下,数字为零。如果为零,则使用 a 。)后面是最后一个数字在标题行中。在上面的示例中,这是数字 1。其后是标题行中 # 所在的字符。它在哪里 # 然后使用 . (这通常可以是单个字母字符,如 A B 或 C 等)因此 UPDATE AAA_1111111_Q_BBBBBB_0_1_# 的唯一 ID 是 X.1。