楼主: reduce_fat
501 11

重金求解 SAS Macro Problem in proc univariate analysis [推广有奖]

荣誉版主

海外论坛首席管理员

泰斗

27%

还不是VIP/贵宾

-

TA的文库  其他...

海外原创经济论文和写作技巧

威望
11
论坛币
3588683 个
通用积分
34029.6777
学术水平
6834 点
热心指数
7193 点
信用等级
6665 点
经验
5660 点
帖子
12296
精华
78
在线时间
1899 小时
注册时间
2011-6-13
最后登录
2024-10-7

一级伯乐勋章 初级热心勋章 初级学术勋章 中级热心勋章 中级学术勋章 高级学术勋章 初级信用勋章 特级学术勋章 高级热心勋章 中级信用勋章 特级热心勋章 高级信用勋章 特级信用勋章

100论坛币
各位坛友好,重金求解一个问题。 我在做假设检验时,需要把两个dataset 合并成一个。其中一个有四个变量Consecutive1 Consecutive2 Consecutive3 Consecutive4. 另一个只有一个常数,但是要根据股票名称的不同,修改这个annual_return 不过每次做一组假设检验时,mu0 不变。但是在合并后的数据集里,annual_return 只是用在mu0上,所用的数据还是有四个变量的那个。

老师说要用macro 来把mu0 = 所读的值改成一个variable。 这样可以把每只股票的annual_return 锁定成mu0 默认的值。 可是我们还没学macro。 我以前学过SAS Base 但是和统计分析不沾边,所以在这里重金求解。

请看下面的Codes 红色标记的mu0 的值就是一支股票的实际 annual_return. 我是看了Excel 的表后,查出来的。但是应该可以用SAS Macro 修改那个code, 把红色标记的数值换成 variable annual_return. 这样每次SAS 就可以自动做假设检验了,不需要我来修改mu0 所付的值。

只有能用的解答才会获奖,如果嫌论坛币悬赏额不够,还可以再加。 谢谢。


summary.xlsx (8.78 KB)

inputNeg0.xlsx (30.09 KB)

comboNeg_0.xlsx (38.51 KB)


/* inputNeg_0 analysis */

data inputNeg_0;

set SASUSER.inputNeg0;

run;


proc means data= inputNeg_0 n mean stddev clm alpha= 0.05;

var Consecutive1 Consecutive2 Consecutive3 Consecutive4;

run;


/* summary for annual return */

data summary_return;

set SASUSER.summary;

keep annual_return;

run;

proc print data= summary_return;

run;


data test_neg0;

merge inputNeg_0 summary_return;

run;


/* p-values are compared with (alpha/n=3) */

proc univariate plotdata = test_neg0 mu0= 0.24672 0.24672 0.24672;

var Consecutive1 Consecutive2 Consecutive3;

run;


proc corr data= inputNeg_0;

run;





最佳答案

ntsean 查看完整内容

没有数据不好调试,不过大概就是这个样子,先用sql存到一个macro variable,然后替换到univariate option里面 proc sql noprint; select annual_return into: return separated by " " from SASUSER.summary; quit; proc univariate plotdata = test_neg0 mu0= &return; var Consecutive1 Consecutive2 Consecutive3; run;
关键词:Univariate Analysis Analysi problem Variate run return

回帖推荐

ntsean 发表于9楼  查看完整内容

只需要一步就可以生成combo了 data combo_Neg0; merge inputNeg_0 summary_return; if _N_ =1 then do; AR1 = annual_return; AR2 = AR1; AR3 = AR1; AR4 = AR1; end; retain AR1 - AR4; drop annual_return; run;

ntsean 发表于7楼  查看完整内容

没有数据不好调试,不过大概就是这个样子,先用sql存到一个macro variable,然后替换到univariate option里面 proc sql noprint; select annual_return into: return separated by " " from SASUSER.summary; quit; proc univariate plotdata = test_neg0 mu0= &return; var Consecutive1 Consecutive2 Consecutive3; run;
复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999
沙发
ntsean 发表于 2013-4-14 09:54:59 |只看作者 |坛友微信交流群
没有数据不好调试,不过大概就是这个样子,先用sql存到一个macro variable,然后替换到univariate option里面

proc sql noprint;
select annual_return into: return separated by " "
from SASUSER.summary;
quit;


proc univariate plotdata = test_neg0 mu0= &return;
var Consecutive1 Consecutive2 Consecutive3;
run;

已有 2 人评分经验 学术水平 热心指数 信用等级 收起 理由
reduce_fat + 5 + 5 + 5 热心帮助其他会员
crackman + 20 鼓励积极发帖讨论

总评分: 经验 + 20  学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

藤椅
sunpj031 发表于 2013-4-14 10:05:26 |只看作者 |坛友微信交流群
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽

使用道具

板凳
512661101 发表于 2013-4-14 10:13:28 |只看作者 |坛友微信交流群
先看看

使用道具

报纸
reduce_fat 发表于 2013-4-16 02:07:30 |只看作者 |坛友微信交流群
512661101 发表于 2013-4-14 10:13
先看看
how to solve?
复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999

使用道具

地板
512661101 发表于 2013-4-16 09:05:22 |只看作者 |坛友微信交流群
不知道啊

使用道具

7
512661101 发表于 2013-4-16 09:08:31 |只看作者 |坛友微信交流群
木有

使用道具

8
reduce_fat 发表于 2013-4-17 02:29:28 |只看作者 |坛友微信交流群
ntsean 发表于 2013-4-16 09:57
没有数据不好调试,不过大概就是这个样子,先用sql存到一个macro variable,然后替换到univariate option里 ...
这台电脑打不了中文, 只能用百度太麻烦了. 谢谢你的帮助, 我还有一些问题. 已经增加了悬赏额.

I have uploaded the data files into the main post. Please check them out first.

My expected outcome is the file entitled "comboNeg_0," but my new codes were unable to reach the goal. If you could help me combine the two datasets into one "comboNeg_0," then my following codes should work well for hypothesis tests. Basically, every observation or cell in variable Consecutive1, Consecutive2, Consecutive3, and Consecutive4 has to match with every cell in AR1, AR2, AR3, and AR4. Then, I can calculate the difference between Consecutive1 and AR1, and so on. Every value in AR1, AR2, AR3, AR4 is the same as the value of annual_return in the dataset entitled "summary."

Please let me know if you could help me revise the following codes. I also added your codes below which worked very well. However, I have not learned proc sql procedure before, so I preferred to use my way to solve the problem. Thanks for your help again.


/* input data */
PROC IMPORT OUT= SASUSER.inputNeg0
            DATAFILE= "H:\My Documents\inputNeg0.xlsx"
            DBMS=EXCEL REPLACE;
     RANGE="Sheet1$";
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;

/* summary of returns */
PROC IMPORT OUT= SASUSER.Summary
            DATAFILE= "H:\My Documents\summary.xlsx"
            DBMS=EXCEL REPLACE;
     RANGE="Sheet1$";
     GETNAMES=YES;
     MIXED=NO;
     SCANTEXT=YES;
     USEDATE=YES;
     SCANTIME=YES;
RUN;

dm 'out;clear;log;clear;'; /* clear log window */
ods html close; /* close previous results */
ods html; /* generate new results */
options linesize = 100 lrecl = 1000;

/* inputNeg_0 analysis */
data inputNeg_0;
set SASUSER.inputNeg0;
run;
proc means data = inputNeg_0 n mean stddev clm alpha = 0.05 NMISS;
var Consecutive1 Consecutive2 Consecutive3;
run;

/* summary for annual return */
data summary_return;
set SASUSER.summary;
keep annual_return;
run;
proc print data = summary_return;
run;

data test_neg0;
merge inputNeg_0 summary_return;
run;
proc print data = test_neg0;
run;

data test_neg0_array;
set test_neg0;
array Consecutive(3)  Consecutive1-Consecutive3;
do i = 1 to 3;
        If Consecutive(i) =. then Consecutive(i) = -1;
        If Consecutive(i) > -1 then do;
                Consecutive(i) = Consecutive(i) - annual_return;
        end;
end;
drop i;
run;
proc print data = test_neg0_array;
run;
proc univariate data = test_neg0_array mu0=0 0 0 alpha = 0.05;
var Consecutive1 Consecutive2 Consecutive3;
run;

/* p-values are compared with (alpha/n) */
proc sql noprint;
select annual_return into: return separated by " "
from SASUSER.summary;
quit;
proc univariate plot data = test_neg0 mu0= &return;
var Consecutive1 Consecutive2 Consecutive3;
run;
proc corr data = inputNeg_0;
run;



复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999

使用道具

9
ntsean 发表于 2013-4-17 02:57:27 |只看作者 |坛友微信交流群
reduce_fat 发表于 2013-4-17 02:29
这台电脑打不了中文, 只能用百度太麻烦了. 谢谢你的帮助, 我还有一些问题. 已经增加了悬赏额.

I have  ...
只需要一步就可以生成combo了

data combo_Neg0;
        merge inputNeg_0 summary_return;
        if _N_ =1 then do;
          AR1 = annual_return;
          AR2 = AR1;
          AR3 = AR1;
          AR4 = AR1;
        end;
        retain AR1 - AR4;
        drop annual_return;
run;

已有 1 人评分经验 学术水平 热心指数 信用等级 收起 理由
reduce_fat + 60 + 3 + 3 + 2 补偿

总评分: 经验 + 60  学术水平 + 3  热心指数 + 3  信用等级 + 2   查看全部评分

使用道具

10
reduce_fat 发表于 2013-4-17 05:41:44 |只看作者 |坛友微信交流群
ntsean 发表于 2013-4-17 02:57
只需要一步就可以生成combo了

data combo_Neg0;
It's not what I wanted. Please take a look carefully of the combo_neg0 excel worksheet again.

I will talk to you a few hours later when I can type Chinese.
复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-11-5 22:32