【问题标题】:How to choice specific data value by row or column index in SAS?如何在 SAS 中按行或列索引选择特定数据值?
【发布时间】:2021-03-19 03:41:44
【问题描述】:

我通常使用 R,但我刚开始学习 SAS。

在 R 中,我们可以像这样制作一些 data.frame:

df <- as.data.frame(matrix(c(1:6),nrow=2,ncol=3))

然后

df[1,2]

是 3。

这是我的问题。如何在 SAS 中使用行和列索引? 我找不到这个..

我想通过双循环的索引来使用行号和列号

【问题讨论】:

  • 您为什么要通过“行”或“列”来引用值?也许您没有正确构建数据集?你真正想做的是什么?
  • 我想通过循环索引使用行号或列号。
  • 您的循环的总体最终目标是什么?回想一下,SAS 本质上是一种循环语言。数据步骤中的set 语句将自动循环遍历每一行。您当然可以引用 SAS 中的行和列的交集,但通常不会使用它,除非您在 IML、OR 或 CASL 中进行操作。
  • 您正在询问如何做一件非常具体的事情,但没有提供任何关于您为什么要这样做的概述。这听起来像xyproblem.info 提供一个您认为该技术有用的用例的实际示例。您将获得一个解决方案,然后您可以学习将其用于解决类似问题。
  • SAS 以不同的方式处理数据,尝试在 SAS 中使用与 R 相同的方法将不起作用。您必须首先了解 SAS 的工作原理,数据步骤中的隐式循环意味着双循环很少见。通常,无论您在做什么,您最有可能只需要一个数组。如果您正在做绝对基本的矩阵工作,那么 IML 可能是您最好的选择,但如果您是 SAS 新手,那么这不太可能是正确的答案。我在 R 和 SAS 中编程,它们是不同的。 Tidyverse 在思维流程方面更接近 SAS。

标签: r sas


【解决方案1】:

如果您确实需要,您可以通过名称访问列,通过 _n_ 访问行,但这种类型的逻辑没有很好的用法。

例如,如果您想要 SASHELP CLASS 数据集中的第三行和第二个变量。

注意,你需要知道变量的名字,不能依赖索引/位置。

这会显示信息:

proc print data=sashelp.class(firstobs = 2 obs=2);
var Age;
run;

这会以两种不同的方式放入一个数据集:

data want;
  set sashelp.class (firstobs = 2 obs=2);
  keep age;
run;

data want;
  set sashelp.class ;
  if _n_ = 3; *filters only the third row into the data set;
run;

R & Python 将所有数据导入内存并使用该方法作为默认处理方法。相反,SAS 一次只加载一行,然后继续循环遍历数据步骤中的每一行,因此您必须以不同的方式考虑每个步骤。基本上将您的流程分解成更小的步骤并且它们起作用。 SAS 确实有一些非常好的内置功能,例如默认置信区间或在单个过程中聚合多个级别的数据的能力。

【讨论】:

    【解决方案2】:

    如果行号和列号有意义,那么您可能不想以这种形式存储“矩阵”。相反,您可能希望以高格式存储它,其中行和列值存储在变量中,矩阵中单元格的值存储在另一个变量中。由于您没有为您的示例提供任何含义,因此我们只需将这些变量命名为 ROW、COL 和 VALUE。

    data have;
      do col=1 to 3 ;
        do row=1 to 2 ;
           value+1;
           output;
        end;
      end;
    run;
    

    现在,如果您想找到 ROW=1 和 COL=2 时的值,这是一个简单的 WHERE 条件。

    proc print data=have;
      where row=1 and col=2;
    run;
    

    结果:

    Obs    col    row    value
    
     3      2      1       3
    

    在真实数据集中,ROW 可能是个案或个人 ID,COL 可能是值的 YEAR 或 VISIT_NUMBER 或 SAMPLE_NUMBER。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2017-12-10
      • 2017-12-20
      • 1970-01-01
      相关资源
      最近更新 更多