相当于sas中循环的rbind?

问题描述 投票:0回答:1

总体思路是(1)通过分层创建子集(2)使用子集运行模型(3)获得模型结果(4)循环执行(1)-(3)并将它们绑定在一起。我知道如何在 R 中产生这个想法,但不知道如何在 SAS 中得到它。

R代码如下:


dd<-data.frame(y=seq(0.1:1,by=0.1),
             base=rep(3,10),
             treat=c(0,0,0,0,0,1,1,1,1,1),
             group1=rep(1:0,5),
             group2=rep(0:1,5),
             group3=c(0,0,1,1,0,0,1,1,0,1))

names<-colnames(dd)[4:6] #group1,group2,group3           

result<-NULL 
for (i in 1:length(names)){
  group_num=names(table(dd[names[i]])) #get how many categories in each group
  for(j in 1:length(group_num)){
    subset=dd[which(dd[names[i]]==group_num[j]),] #generate a subgroup of each category in each group
    model=lm(y~base+treat,data=subset) #use the subgroup to run a linear model
    line=c(names[i],group_num[j],model$coefficients) #get the result from the model for each category in each group
    result=rbind(result,line) #finally rbind the result together
  }
}          

我想弄清楚的主要部分是: (1)如何通过

names=colnames(dd)[x1:xn]
选择分层的组名,然后执行循环(即
for(i in 1:length(names)
)来创建子集。真实的数据集包含超过20个组,所以我更喜欢通过类似
names=colnames(dd)[x1:xn]
之类的方式获取组名称,而不是在SAS中一一列出。 (2)如何在SAS中循环建模后绑定
line
结果。

sas
1个回答
0
投票

我不知道足够的 R 来理解您的示例代码,但是如果您尝试在多个子组上运行相同的模型,您通常会在 SAS 中使用一个回归 PROC 来执行此操作,并使用一个 BY 语句来标识子组- 团体。因此,给定一个包含变量 Sales、Inventory 和 Region 的数据集 SASHELP.CLASS,下面的代码将运行以 Sales 作为因变量、Inventory 作为自变量的线性模型,并将针对数据中的每个区域子集运行该模型。 OUTEST 选项将估计值写入新表 MyEst。根据您的需要,有不同的方法可以收集不同的估算值。

proc reg data=sashelp.shoes outest=myest ;
  model Sales=inventory;
  by region ;
run ;
© www.soinside.com 2019 - 2024. All rights reserved.