[R]中的简单[SAS]宏,如何?

时间:2018-07-27 13:40:00

标签: r macros sas

我在工作库中有一个名为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)

谢谢。

2 个答案:

答案 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