【问题标题】:First and Last in SAS and RSAS 和 R 中的第一个和最后一个
【发布时间】:2014-02-17 05:57:24
【问题描述】:

我正在将 SAS 代码转换为 R,但在复制 IF First 时遇到问题。 & Last. R 中的命令。 SAS 命令是 -

Data A;
Set B;
BY CompID, Id, Date;
IF First.Date;
run;

我的理解是,仅选择 CompID、ID 和日期组合的最早日期并将其输出到数据 A。我说的对吗?

我知道 R 中的 duplicated 命令,但如果我使用以下代码 -

A <- B[!duplicated(B$Date),]

我得到的观察结果比我的 SAS 输出要少。我在这里错过了什么吗?

提前致谢。

【问题讨论】:

    标签: r if-statement sas


    【解决方案1】:

    R 中的构造可以是(因为还有一个duplicated.data.frame 函数):

    A <- B[!duplicated(B[ c('CompID', 'Id', 'Date') ] ) ,]
    

    要复制 .Last 操作,请查看复制的帮助页面,我想您会找到某种 fromLast 参数,但我总是需要检查它的拼写。

    结构:“我得到的观察比……少”对我来说听起来是错误的,但我并没有走遍所有说英语的国家。至少在美国,我认为“更少”或“更少”会更容易阅读。

    【讨论】:

    • 谢谢!我没有意识到你可以用列的组合来做到这一点!这解决了我的问题。至于“较低”与“较小”,我不确定用法..
    • 嗨!我一直在思考答案,我有一个疑问。 BY 语句按两个变量对数据进行排序,然后挑选出第一个值,对吗?所以在给出的示例中,它将按 3 列对数据进行排序,并选择最早的 Date 值的行,对吗?在这种情况下,如果我在 R 中对我的数据进行排序并执行 !duplicated(date),那会是一样的吗?
    【解决方案2】:

    首先声明BY CompID, Id, Date;中不应有任何逗号。

    其次,A &lt;- B[!duplicated(B$Date),] 不等同于您发布的 SAS 代码。

    正确的等价物是:

    Data A;
    Set B;
    BY Date;
    IF First.Date;
    run;
    

    我的理解是,只有最早的日期为 CompID、ID 和 选择日期组合并输出到数据 A。我说的对吗?

    你的理解是正确的。

    【讨论】:

    • 谢谢!逗号是我的错别字,多亏了 R。 什么是 R 等价物?我在想一个 SQLDF 语句,比如'Select compId, id, min(date) from B group by compId, id')。对吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多