R相当于SAS DO循环

时间:2018-04-23 11:15:41

标签: r loops sas

ID类型销售日期 1 1 $ 5,027 18-Jan-2016
2 1 $ 2,646 10-Nov-2012
3 1 $ 7,549 11 - 2018年2月11日 4 2 $ 4,536 18-Feb-2016
5 2 $ 3,118 26-Aug-2017
6 3 $ 9,815 07-Jun-2017
7 3 $ 885 2017年12月15日 8 3 $ 2,911 10-Nov-2017
9 3 $ 1,823 2015年10月12日 10 4 $ 5,723 04-Jul-2014
11 5 $ 2,612 31-Mar-2015
12 5 $ 3,344 06-Jan-2016
13 5 $ 4,215 22-May-2016
14 6 $ 5,500 23-Mar-2018

要将上述数据集(Main)拆分为Type,我们可以使用以下宏。如何在R中做同样的事情 提前致谢。

%MACRO split;  

%DO m = 1 %TO 6 ;  


DATA type_%eval(&m) ;  


SET main ;  


IF Type = &m then output type_%eval(&m) ;  


RUN ;  

%END ;  

%MEND split ;  

%split ;  

ID类型销售日期
1 1 $ 5,027 18-Jan-2016
2 1 $ 2,646 10-Nov-2012
3 1 $ 7,549 11-Feb-2018

ID类型销售日期
4 2 $ 4,536 18-Feb-2016
5 2 $ 3,118 26-Aug-2017

ID类型销售日期
6 3 $ 9,815 07-Jun-2017
7 3 $ 885 2017年12月15日 8 3 $ 2,911 10-Nov-2017
9 3 $ 1,823 2015年10月12日

这将为我提供以下数据集Type1,Type2,Type3 ..... Type6

1 个答案:

答案 0 :(得分:0)

您可以使用split。如果您的数据框名为df,请执行

df.list <- split(df, df$Type)

这为您提供了数据框列表。您可以使用$Type的值(如下所示)获取单个数据框。由于这些名称不遵循不以数字开头的惯例,因此您必须在它们周围加上刻度或引号

df.list$'1'

您还可以使用列表索引,例如df.list[3]代表第三个data.frame。在你的例子中,巧合的是,它们有时会对齐,例如df.list$'1'df.list[1]相同。