我在工作库中有一个名为example1,example2,example3,example4的数据集,其变量为SEX(1或2) 通过使用SAS中的MACRO,我将名为exampleS1,exampleS2,exampleS3,exampleS4的数据集限制为SEX = 1
%macro ms(var=);
data exampleS&var.;
set example&var.; IF SEX=1;
run;
%mend ms;%ms(var=1);%ms(var=2);%ms(var=3);%ms(var=4);
现在,我想在R中完成这项工作 对我来说,用R做到这一点并不容易。我该怎么做? (假设example1,example2,example3,example4是data.frames)
谢谢。
答案 0 :(得分:0)
在名称中包含带有数字索引的变量是非常要做的SAS事情,而不是完全像R那样。如果在R中具有相关的data.frame,则将它们保留在列表中。有很多方法可以将许多文件读入列表中(请参见here)。假设您有一个data.frames列表
examples <- list(
data.frame(id=1:3, SEX=c(1,2,1)),
data.frame(id=4:6, SEX=c(1,1,2)),
data.frame(id=7:9, SEX=c(2,2,1))
)
然后您可以使用来获取所有SEX = 1值
exampleS <- lapply(examples, subset, SEX==1)
,您可以通过
访问它们exampleS[[1]]
exampleS[[2]]
exampleS[[3]]
答案 1 :(得分:-1)
您应该为R通道而不是SAS通道编程R,因为这将导致无尽的痛苦。 SAS宏语言和R不能混合使用imo,但这是这样的:
# create example df's
for (i in 1:4) {
assign(paste0("example", i), data.frame(sex = sample(0:1, 10, replace = T)))
}
example1; example2; example3; example4
# filter and store result in a list of df's
l <- list(example1 = example1, example2 = example2, example3 = example3, example4 = example4)
want <- lapply(l, function(x) subset(x, sex == 1))
want$example1; want$example2; want$example3; want$example4 # get list of data frames
# almost certainly what you should do
# in principle possible to this too, but advise against it
list2env(lapply(l, function(x) subset(x, sex == 1)), .GlobalEnv)
example1; example2; example3; example4