楼主: clhclhjdz
8945 19

关于滚动求相关系数的问题 ! 求助 [推广有奖]

11
playmore 发表于 2012-12-16 15:39:40
jingju11 发表于 2012-12-14 23:59
My apology, program was updated. Again, as above, SAS/IML provides  function CORR().
jingju
学习了下call stdize的用法
你这里用到的call stdize的第一个参数是设置VARDEF-options
默认应为DF,即degree of freedom,自由度
改成N就不会除以N-1了

大师有比较过proc iml和data步中用array的效率吗?
另外proc iml里有regression的函数吗?
谢谢!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

12
ziyenano 发表于 2012-12-16 16:33:11
playmore 发表于 2012-12-16 15:35
嗯,学习了
IML里有CORR就方便了
还有一个小错误,do循环里应为
写漏了,多谢!

13
jingju11 发表于 2012-12-17 01:42:06
playmore 发表于 2012-12-16 15:39
学习了下call stdize的用法
你这里用到的call stdize的第一个参数是设置VARDEF-options
默认应为DF,即 ...
是的。这两个除数应该保持一致即可.
我不用iml的最主要原因是我(们)的sas版本不支持IML。另外,想一想,实际所面临的数据类型复杂,有缺失有错误。imll基本上100%的需要数字而且很纯粹的数字。你花费500行的sas数据步为iml准备数据,然后在iml里做个简单运算,最后又返回到数据表格的形式。谈什么效率?当然,如果要求逆矩阵,用数据步恐怕十天也做不来。
就当前的问题而然,用数据步相比较于iml大概只要20% 的是间。原因是iml要读入读出数据。对于这种简单计算本身,无论DATA STEP OR IML,都几乎没有时间消耗。
京剧

14
playmore 发表于 2012-12-17 08:52:08
jingju11 发表于 2012-12-17 01:42
是的。这两个除数应该保持一致即可.
我不用iml的最主要原因是我(们)的sas版本不支持IML。另外,想一想 ...
多谢
我这里用不到10000量级的样本做实验,data和iml没有明显的差别

另之前我研究滚动回归的宏时,先生成一个交易日或日历日列表,然后按指定的时间窗生成Beg_Date和End_Date表格,然后每次从这张表格中取出一组起始和终止日期作为宏变量,最终体现在proc reg步中的where子句内,如下所示:

proc reg data=have outest=want;
where date between "&Beg_Date"d and "&End_Date"d;
...
quit;

现在想到可以把这段proc reg换成proc corr,也可以实现滚动求相关系数的问题了
写出来供大家参考
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

15
jingju11 发表于 2012-12-17 10:30:29
  1. 我这里用不到10000量级的样本做实验,data和iml没有明显的差别
复制代码
为什么不给出代码和结果?有些空谈。我的结论是因为sas/iml需要读入数据,计算,然后输出。数据步三者合一。
其实一个人说话没有必要过分客气。在讨论问题的时候你不觉得这样会把一个问题拖的很慢吗?这个问题其实非常简单。。。。
京剧

16
playmore 发表于 2012-12-17 11:10:14
jingju11 发表于 2012-12-17 10:30
为什么不给出代码和结果?有些空谈。我的结论是因为sas/iml需要读入数据,计算,然后输出。数据步三者合一。 ...
嗯,不好意思,之前没有给出结果因为是前两天随便试的
我当时就是想了解下用Data步和IMl的效率差别

刚才我用更大的样本比较了下,确实用data步要快多了,贴下结果

方法一:iml
NOTE: Exiting IML.
NOTE: The data set WORK.HAVE1 has 4469063 observations and 3 variables.
NOTE: 10383 workspace compresses.
NOTE: PROCEDURE IML used (Total process time):
      real time           27.32 seconds
      cpu time            19.10 seconds

方法二:data步中使用array

NOTE: Missing values were generated as a result of performing an operation on missing values.
      Each place is given by: (Number of times) at (Line):(Column).
      3 at 572:18
NOTE: There were 4469063 observations read from the data set WORK.HAVE.
NOTE: The data set WORK.HAVE2 has 4469063 observations and 4 variables.
NOTE: DATA statement used (Total process time):
      real time           7.31 seconds
      cpu time            2.56 seconds
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

17
jingju11 发表于 2012-12-17 11:21:31
playmore 发表于 2012-12-17 11:10
嗯,不好意思,之前没有给出结果因为是前两天随便试的
我当时就是想了解下用Data步和IMl的效率差别
appreciated it. jingju

18
huangtianxiao 发表于 2013-4-2 15:58:21
jingju11 发表于 2012-12-14 23:59
My apology, program was updated. Again, as above, SAS/IML provides  function CORR().
jingju
你好,我在sas9.1上运行这段代码结果提示如下的错误:

183    mR=mean(of R
  • );
    ERROR: ARRAYNAME
  • 说明要求基于数组的变量。

    不知道该怎么修改呢,求指教~~
  • 19
    ydb8848 发表于 2015-7-12 13:57:14
    用matlab可以求滚动相关系数嘛?不会SAS啊,多谢!

    20
    忍冬的秋 发表于 2015-8-8 14:06:47
    自己写的小程序,望批评指教哈
    data a;
    input x y;
    cards;
    1       2
    3       5
    5       6
    7       7
    6       9
    8      10
    7       9
    ;
    run;
    %macro change;
    data _null_;
    proc sql noprint;
    select count(*) into :len from work.a;
    quit;

    %do i=1 %to (&len.-2);
    data b;
    set a(firstobs=&i.);
    if _n_ <=3;
    run;
    ods output
    PearsonCorr=corr(keep=y);
    proc corr data=b;
    var x y;
    run;
    ods output close;
    data corr1;
    set corr;
    if _n_=1;
    run;
    proc append base=final new=corr1;
    run;
    %end;
    %mend change;
    %change;

    您需要登录后才可以回帖 登录 | 我要注册

    本版微信群
    加好友,备注cda
    拉您进交流群
    GMT+8, 2026-1-24 07:46