【问题标题】:SAS IML equivalents of Alter Table and UpdateAlter Table and Update 的 SAS IML 等效项
【发布时间】:2016-02-06 16:44:23
【问题描述】:

我是否正确,要向现有 SAS 数据集添加新列,我在 proc sql 中使用 Alter Table 语句(并且,为了填充新列,使用 Update 语句)?如果是这样,proc iml 中的等效语句是什么(或者甚至可以在 IML 中完成)?

【问题讨论】:

  • IML 并没有真正的“数据集”概念,它有一个矩阵。你能发布一个你问的例子吗?而且,现在你问的问题不止一个。您是专门问 IML 问题,其余的只是无关信息吗?
  • 就我个人而言,我不会使用 ALTER table 和 Update 将变量添加到表中。我会创建一个新表,其中包含我想要从旧表中获取的变量并合并或计算新变量。在 IML 中,我会做同样的事情。通过将旧矩阵与具有兼容维度的新矩阵连接来创建一个新矩阵。
  • 如何确保连接的新表中的值与旧数据集中的相应值一致?

标签: sas alter-table sas-iml update-statement


【解决方案1】:

听起来你在问水平连接。您可以使用连接运算符 (||) 将一个矩阵的列附加到另一个矩阵,前提是两个矩阵具有相同的行数。例如,以下语句将 2x1 向量连接到 2x3 矩阵。结果是一个 2x4 矩阵:

proc iml;
x = {1 2 3,
     4 5 6};
y = {7, 8};
z = x || y;
print z;

但是请注意,这会分配一个新矩阵 (z) 并复制 x 和 y 矩阵的内容。因此,它不如从头创建一个 4x2 矩阵然后使用下标填充列那样有效。详情见文章"Friends don't let friends concatenate results inside a loop."

【讨论】:

  • 我要做的是将 1 列矩阵的内容写入现有数据集中的新列中。有没有办法在 IML 中执行此操作(使得新内容与数据集现有列中的相应值对齐)?
  • 在 SAS 中,您需要创建一个新数据集。您不能将变量添加到现有数据集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-14
  • 2021-04-18
  • 1970-01-01
相关资源
最近更新 更多