使用嵌入在SQL中的R的累积度量
请原谅,我对R非常陌生,我只是在看SQL 2016环境中当前的选项 我们目前要求提供累积绩效回报。下面是一个示例数据集:使用嵌入在SQL中的R的累积度量,sql,r,sql-server,Sql,R,Sql Server,请原谅,我对R非常陌生,我只是在看SQL 2016环境中当前的选项 我们目前要求提供累积绩效回报。下面是一个示例数据集: FundID Date FundReturn ABC 1987-10-31 0 ABC 1987-11-30 -9.28669 ABC 1987-12-31 3.08304 ABC 1988-01-31 -3.00125 ABC 1988-02-29 0.61238 ABC 1988-03-31 4.
FundID Date FundReturn
ABC 1987-10-31 0
ABC 1987-11-30 -9.28669
ABC 1987-12-31 3.08304
ABC 1988-01-31 -3.00125
ABC 1988-02-29 0.61238
ABC 1988-03-31 4.29258
ABC 1988-04-30 0.13697
ABC 1988-05-31 2.57786
ABC 1988-06-30 2.36947
ABC 1988-07-31 0.57114
ABC 1988-08-31 -1.21550
ABC 1988-09-30 7.09027
ABC 1988-10-31 3.45807
ABC 1988-11-30 1.12679
我们需要获取此数据集并对其应用累积性能回报度量,以便数据集如下所示:
FundID Date FundReturn FundReturnCumu100 FundReturnCumu0
ABC 1987-10-31 0 1 0
ABC 1987-11-30 -9.28669 0.9071331 -0.0928669
ABC 1987-12-31 3.08304 0.935100376 -0.064899624
ABC 1988-01-31 -3.00125 0.907035676 -0.092964324
ABC 1988-02-29 0.61238 0.912590181 -0.087409819
ABC 1988-03-31 4.29258 0.951763845 -0.048236155
ABC 1988-04-30 0.13697 0.953067476 -0.046932524
ABC 1988-05-31 2.57786 0.977636221 -0.022363779
ABC 1988-06-30 2.36947 1.000801018 0.000801018
ABC 1988-07-31 0.57114 1.006516993 0.006516993
ABC 1988-08-31 -1.2155 0.994282779 -0.005717221
ABC 1988-09-30 7.09027 1.064780113 0.064780113
ABC 1988-10-31 3.45807 1.101600954 0.101600954
ABC 1988-11-30 1.12679 1.114013684 0.114013684
我可以使用以下代码在SQL中创建此项:
选择
芬迪德
,[日期]
,基金回报
,ISNULL
EXPSUMLOGABSNULLIFFundReturn+100/100,1
按FundID,[日期]行无限制的超额订购
,1为基金收益CUMU100
,ISNULL
EXPSUMLOGABSNULLIFFundReturn+100/100,1
按FundID,[日期]行无限制的超额订购
,1-1作为基金收益cumu0
从工作台
在[日期]前订购
我还想测试使用嵌入到SQL存储过程中的R函数是否可以得到相同的结果?上面的数学基本上是一个时间序列的性能回报的乘积,那么我是否可以使用一个乘积函数来创建相同的结果数据集
编辑:到目前为止,我已经完成了以下工作,它使用sp_execute_external_脚本返回数据集的基础:
EXEC sp_execute_外部_脚本
@语言=N'R'
,@script=N'OutputDataSet我们可以使用
library(dplyr)
df1 %>%
arrange(FundID, Date) %>%
mutate(FundReturnCumu100 = exp(cumsum(log(abs((FundReturn + 100)/100)))),
FundReturnCumu0 = FundReturnCumu100 - 1)
# FundID Date FundReturn FundReturnCumu100 FundReturnCumu0
#1 ABC 1987-10-31 0.00000 1.0000000 0.0000000000
#2 ABC 1987-11-30 -9.28669 0.9071331 -0.0928669000
#3 ABC 1987-12-31 3.08304 0.9351004 -0.0648996237
#4 ABC 1988-01-31 -3.00125 0.9070357 -0.0929643237
#5 ABC 1988-02-29 0.61238 0.9125902 -0.0874098186
#6 ABC 1988-03-31 4.29258 0.9517638 -0.0482361550
#7 ABC 1988-04-30 0.13697 0.9530675 -0.0469325241
#8 ABC 1988-05-31 2.57786 0.9776362 -0.0223637789
#9 ABC 1988-06-30 2.36947 1.0008010 0.0008010181
#10 ABC 1988-07-31 0.57114 1.0065170 0.0065169930
#11 ABC 1988-08-31 -1.21550 0.9942828 -0.0057172210
#12 ABC 1988-09-30 7.09027 1.0647801 0.0647801126
#13 ABC 1988-10-31 3.45807 1.1016010 0.1016009542
#14 ABC 1988-11-30 1.12679 1.1140137 0.1140136836
在深入研究谷歌之后,我终于找到了答案。最后,我得出以下结论:
FundID Date FundReturn FundReturnCumu100 FundReturnCumu0
ABC 1987-10-31 0 1 0
ABC 1987-11-30 -9.28669 0.9071331 -0.0928669
ABC 1987-12-31 3.08304 0.935100376 -0.064899624
ABC 1988-01-31 -3.00125 0.907035676 -0.092964324
ABC 1988-02-29 0.61238 0.912590181 -0.087409819
ABC 1988-03-31 4.29258 0.951763845 -0.048236155
ABC 1988-04-30 0.13697 0.953067476 -0.046932524
ABC 1988-05-31 2.57786 0.977636221 -0.022363779
ABC 1988-06-30 2.36947 1.000801018 0.000801018
ABC 1988-07-31 0.57114 1.006516993 0.006516993
ABC 1988-08-31 -1.2155 0.994282779 -0.005717221
ABC 1988-09-30 7.09027 1.064780113 0.064780113
ABC 1988-10-31 3.45807 1.101600954 0.101600954
ABC 1988-11-30 1.12679 1.114013684 0.114013684
声明@R_脚本NVARCHARMAX;
设置@R_Script=N'
OutputDataSet抱歉@akrun这听起来可能是个愚蠢的问题,但我如何才能将我的sql表传递给此脚本?我可以在MS SQL Server 16中直接使用它,并在其上安装R服务吗?抱歉,正如我所说,我对SQL环境中的R非常陌生