gpt4 book ai didi

r - 如何在 R 中编写 SAS 宏?

转载 作者:行者123 更新时间:2023-12-02 03:01:09 25 4
gpt4 key购买 nike

我想测试我的团队在 R 中生成的 SAS 代码,以比较我们从每个代码中获得的估计值,但作为 R 的新手我运气不佳。在 SAS 中,我们编写了 3 个宏来生成三个独立的估计值(HFS010、HFS011、HFS012),这里给出了一个示例;

%macro HFS010 (peninc_var, pengn_var, pentax_var, pentype_var, HFS010_x_var);
do i = 1 to dim(pentypex);
if &pentype_var = 1 and &pengn_var = 1 then &HFS010_x_var = &peninc_var;
else if &pentype_var = 1 and &pengn_var = 2 then &HFS010_x_var = &peninc_var + &pentax_var;
end;
%mend HFS010;

基本上,这个想法是每个宏都会产生养老金总收入的估计值(因此在适用的情况下,将从养老金中扣除的税款加到养老金收入值上)。对于 pentype = 1 (HFS010)、pentype = 2 (HFS011) 和 pentype = 3 至 7 (HFS012) 的情况,我们需要三个宏,调查最多接受 16 个养老金条目。

为了尝试在 R 中生成与上述代码等效的代码,我编写了以下代码;

for(i in 1:16) {
pens_data[[paste0("HFS010_",i)]] <- case_when(
pens_data[[paste0("pentype",i)]] == 1 & pens_data[[paste0("pengn",i)]] == 1 ~ pens_data[[paste0("peninc",i)]],
pens_data[[paste0("pentype",i)]] == 1 & pens_data[[paste0("pengn",i)]] == 2 ~ pens_data[[paste0("peninc",i)]] + pens_data[[paste0("pentax",i)]],
TRUE ~ 0)

此代码不会产生错误,但在检查估算值时,有些情况下本应有估算值但留空。

有人知道用 R 编写宏的方法吗?我想过为 HFS010、HFS011、HFS012 中的每一个编写一个函数,但作为 R 的新手我不确定如何去做。如果有人对为什么我的 R 代码没有产生正确的估计有任何建议,或者他们将如何在 R 中编写等效的 SAS 宏,我们将不胜感激!我曾尝试使用 defmacro 但无法正常工作。

非常感谢!阿什莉

最佳答案

在 R 中有很多方法可以写这个。但首先是一些评论:

  • R 可以很好地处理向量,所以我们应该尽可能地操作向量。这要快得多,并且可以避免带有副作用的缓慢 for 循环。
  • 为了帮助其他人给您答案,请提供涵盖这两种用例的可重现示例。

例如:

set.seed(1)
dx <- data.frame(
peninc_var=sample(c(1,3),5,TRUE),
pengn_var=sample(c(1,2),5,TRUE),
pentax_var=1:5)

这里是 base R 中的一个选项。我正在使用 ifelse 创建新变量 HFS010_x_var :

dx$HFS010_x_var <- 
with(dx,{
## I am adding a last NO condition here to assign missing NA
ifelse(peninc_var==1 & pengn_var==1,peninc_var,
ifelse(peninc_var==1 & pengn_var==2,peninc_var + pentax_var,NA))
})

peninc_var pengn_var pentax_var HFS010_x_var
1: 1 2 1 2
2: 1 2 2 3
3: 3 2 3 NA
4: 3 2 4 NA
5: 1 1 5 1

另一种选择(更多糖语法)是使用data.table:

library(data.table)
setDT(dx)
dx[peninc_var==1 & pengn_var==1,HFS010_x_var := peninc_var]
dx[peninc_var==1 & pengn_var==2,HFS010_x_var := peninc_var+pentax_var]

关于r - 如何在 R 中编写 SAS 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46153544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com