Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SAS proc在R中表示等效_R_Sas_Summary_Weighted - Fatal编程技术网

SAS proc在R中表示等效

SAS proc在R中表示等效,r,sas,summary,weighted,R,Sas,Summary,Weighted,我必须把一些人的SAS代码翻译成R,因为我的公司正在从SAS迁移,我想知道是否有一个可比的R函数来表示proc?作为参考,proc means products(或至少我需要它生成的内容)是观察数、平均值、最小值、最大值和标准偏差。同样重要的是,这可以通过分组和加权来完成。R中的summary函数生成这个输出,但我认为您不能这样做。我更喜欢使用base R的答案,但如果不存在,则可以使用包 例如: df Temp V1 Weight 1 Hi 1 8 2 Low 2

我必须把一些人的SAS代码翻译成R,因为我的公司正在从SAS迁移,我想知道是否有一个可比的R函数来表示proc?作为参考,proc means products(或至少我需要它生成的内容)是观察数、平均值、最小值、最大值和标准偏差。同样重要的是,这可以通过分组和加权来完成。R中的summary函数生成这个输出,但我认为您不能这样做。我更喜欢使用base R的答案,但如果不存在,则可以使用包

例如:

df
   Temp V1  Weight
1  Hi    1  8 
2  Low   2  3 
3  Hi    3  9 
4  Low   4  9 
我需要按组生成V1的各种加权汇总统计数据(中位数、最小值、最大值、总和、平均值等),如下所示:

Group Min Max Mean Sum
Hi      1  3  2.06 35
Low     2  4  3.5  42
 

通常,基本R中的
aggregate
可以作为SAS的
proc means
的对应项。通常,此方法在单个数值列上运行单个简单函数(接受一个输入)。以下是该方法的公式版本:

aggregate(V1 ~ Temp, df, FUN=mean)
但是,
aggregate
可以扩展到多个列和多个函数:

agg_raw <- aggregate(cbind(V1, Weight) ~ Temp, df, 
                     FUN = function(x) c(count = length(x),
                              min = min(x), 
                              p = quantile(x, 2, probs = seq(0, 1, 0.25))[2],
                              median = median(x),
                              mean = mean(x),
                              p = quantile(x, 2, probs = seq(0, 1, 0.25))[4],
                              sum = sum(x))
                    )

agg_df <- do.call(data.frame, agg_raw)
agg_df
#   Temp V1.count V1.min V1.p.25. V1.median V1.mean V1.p.75. V1.sum Weight.count Weight.min Weight.p.25. Weight.median Weight.mean Weight.p.75. Weight.sum
# 1   Hi        2      1      1.5         2       2      2.5      4            2          8         8.25           8.5         8.5         8.75         17
# 2  Low        2      2      2.5         3       3      3.5      6            2          3         4.50           6.0         6.0         7.50         12
一旦有了这些列,就可以在
min
max
上进行聚合,以返回分组需求:


agg_df如果您包含一个简单的示例输入和所需的输出,可以用来测试和验证可能的解决方案,那么就更容易为您提供帮助。假设SAS函数不存在,只需准确地解释您想在R中做什么。作为一名R和SAS程序员,在我看来,没有一个很好的函数,尤其是当您需要不同级别的摘要时。PROC FREQ/MEANS是我在SAS中错过的最重要的事情。。我通常只使用tidyverse方法来建立自己的统计数据,因此更类似于使用PROC SQL而不是PROC MEANS。@astel,RStudio社区通常更有用-没有SAS社区论坛那么活跃,但您会在合理的时间范围内得到答案。已经编写了很多函数来汇总数据。如果你愿意去探索,你可能会找到一些你想要的东西。一些示例(包::函数):
base::summary
RcmdrMisc::numSummary
DecTools::Desc
Hmisc::description
,'pastecs::stat.Desc',和
psych::descripe
。这并不是详尽无遗的,只是我发现有用的一些方法。