【问题标题】:SAS absorb function in RR中的SAS吸收功能
【发布时间】:2015-08-12 11:06:22
【问题描述】:

我有一个数据集(示例列和数据包含在下面),我使用以下方法在 SAS 中运行回归:

proc glm data = dataset;
model units = price;
by category;
absorb store;
run;

数据集有多个类别和每个类别的多个商店。我从 SAS 得到的系数与我在 R 中运行回归时得到的系数不同:

lm(units~ price, data=data)

我知道这两个模型是不同的。但是如何复制使用吸收的 SAS 模型并在 R 中按类别运行模型?

Date          Store     Category    units           price
05/29/15    1500261     Drinks      -1.579668674    1.455073877
05/29/15    1500314     Drinks      -1.356171009    1.429736919
05/29/15    1500361     Drinks      -1.033295892    1.359770698

【问题讨论】:

  • 你能发布你的结果和一些虚拟数据的链接吗?
  • 我们大多数人都没有 SAS 许可证(毕竟我们有 R)。显示输出并解释 SAS 代码的作用。
  • 根据sas docs,你不需要吸收语句,所以我想你可以使用其他方式,然后翻译成r
  • 还有@Joe 我不知道你为什么总是坚持从这些类型的问题中删除 sas 标签,这会适得其反。显然,您或其他 sas 专家可能知道这个问题的答案(或吸收正在做什么),而无需像我刚才那样浏览文档。但是去掉标签,sas程序员就永远看不到这个问题了,那么你每次都这样做的动机是什么?
  • sas 适用于关于 SAS 的问题。这些是关于 R 的问题。按照惯例,不应该用原始语言的标签来标记直接的代码复制。如果问题是“SAS 是做什么的”,那么欢迎使用sas - 但这不是这个问题要问的。

标签: r glm lm


【解决方案1】:

如果您的商店数量相对较少,请使用lm(units~ price+factor(stores), data=data)

SAS 中的“按类别”语句可以由子集参数lm(units~ price+factor(stores), data=data, subset=category=="Drinks") 中的每个类别实现。每个类别都必须连续插入到子集参数中。

如果您有很多商店:

SAS 中的吸收语句等效于在plm 函数中实现的固定效应方法。首先,数据集必须在数据集的第一列和第二列中使用商店和日期进行组织,然后进行相应的排序以使此过程运行:

datanew<-data[order(data$stores,data$Date),]

然后使用:

library(plm)
plm(units~ price, data=datanew, subset=category=="Drinks",
effect="individual",model="within",index=c("stores","date"))

现在,如果您将“个人”更改为“双向”,您甚至可以进一步控制时间段。

【讨论】:

    猜你喜欢
    • 2018-09-13
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2021-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多