楼主: jiao_taishan
4011 3

[原创博文] 求救:SAS宏程序 [推广有奖]

  • 25关注
  • 4粉丝

教授

31%

还不是VIP/贵宾

-

威望
0
论坛币
9295 个
通用积分
272.4229
学术水平
7 点
热心指数
8 点
信用等级
4 点
经验
3402 点
帖子
524
精华
0
在线时间
1942 小时
注册时间
2009-9-21
最后登录
2024-3-10

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人第一次用SAS编程,做了3周了,下面的程序是统计分析最后的一段了,但是出问题了,实在想不出原因,麻烦各位帮忙看看。

赋值
%let samplesize=3000;    %let groups=298;      
%let gama00_hat=5091.25; %let gama01_hat=3002.76; %let gama02_hat=1200.02;%let gama03_hat=3456.93;
%let gama40_hat=773.48;  %let gama41_hat=-837.86; %let gama42_hat=-748.40; %let gama43_hat=1339.29;
%let gama50_hat=7668.16; %let gama51_hat=6169.1;  %let gama52_hat=8481.79; %let gama53_hat=-2298.41;
%let gama60_hat=2361.84; %let gama61_hat=1150.01; %let gama62_hat=1853.28; %let gama63_hat=-2032.24;
%let gama80_hat=406.75;  %let gama81_hat=293.52;  %let gama82_hat=-193.78; %let gama83_hat=-255.55;
%let beta1_hat=-67.9889; %let beta2_hat=-369.49;  %let beta3_hat=-648.17;

程序
proc sql;
create table data100 as select w1,w2,w3,country from sasuser.stand order by country;
create table sasuser.data_level_2 as select distinct country,w1=1 as w1,w2=1 as w2, w3=1 as w3 from sasuser.stand;
quit;

宏程序
%macro ml_bootstrap;
%do sample=1 %to 100;
%put samp=&sample;
proc surveyselect out=data1 data=sasuser.new_level_1_resd method=URS n=&samplesize outhits noprint;

data newdata1;
merge data1 sasuser.stand1;

proc surveyselect out=data2 data=sasuser.new_level_2_resd method=URS n=&groups outhits noprint;

data newdata2;
merge data2 sasuser.data_level_2;

new_alpha=&gama00_hat+&gama01_hat*w1+&gama02_hat*w2+&gama03_hat*w3+new_u0;
new_beta4=&gama40_hat+&gama41_hat*w1+&gama42_hat*w2+&gama43_hat*w3+new_u1;
new_beta5=&gama50_hat+&gama51_hat*w1+&gama52_hat*w2+&gama53_hat*w3+new_u2;
new_beta6=&gama60_hat+&gama61_hat*w1+&gama62_hat*w2+&gama63_hat*w3+new_u3;
new_beta8=&gama80_hat+&gama81_hat*w1+&gama82_hat*w2+&gama83_hat*w3+new_u5;
data bootstrap_data (keep=country new_y1 new_alpha new_beta4 new_beta5 new_beta6 new_beta8 x1 x2 x3 x4 x5 x6 x8 w1 w2 w3 new_resd_1);
merge newdata1 newdata2; by country;
new_y1=new_alpha+new_beta4*x4+new_beta5*x5+new_beta6*x6+new_beta8*x8+&beta1_hat*x1+&beta2_hat*x2+&beta3_hat*x3+new_resd_1;

proc mixed method=reml noinfo noitprint covtest;
class country;
model new_y1=w1|x4 w1|x5 w1|x6 w1|x8 w2|x4 w2|x5 w2|x6 w2|x8 w3|x4 w3|x5 w3|x6 w3|x8 x1 x2 x3
/solution ddfm=bw notest outp=predicted;
random int x4 x5 x6 x8/solution type=un subject=country;
ods output solutionf=reg_coef covparms=resd_cov;
run;

%put &syslast;
%if &syslast=work.reg_coef %then %do;        请问这句程序是什么意思?&syslast是个什么变量?
proc transpose data=reg_coef out=fixed_p; var estimate; id effect;    这句程序没有运行,什么原因呢?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:SAS宏程序 SAS宏 宏程序 surveyselect proc mixed groups 程序 统计

沙发
jingju11 发表于 2011-8-13 04:55:03 |只看作者 |坛友微信交流群
syslast 给出的是最新的数据集名字。在这里应该是outp=生成的数据集。另外syslast的数据集名统一为大写。在你的mixed过程中,可以产生三个数据集:两个从ods而来,一个从outp=而来。这三个的先后顺序sas似乎没有给出明确的说明。大概是outp=的靠后。这也说得通:outp=里的预测值需要全面的信息,比如说,随机变量的信息等等。而比较ods输出的数据集的前后,可以大致参照trace on 在log里给出的表格顺序。也就是说,solutionF=比covparms=的靠后。
所以说如果没有outp=的干扰,syslast是有控制作用的(如果用大写的话)
我也不很理解这里为什么用syslast来控制transpose过程。原来的设计者的深意看来有些深奥吧。该不是用来判断solutionF=是否生成有效的数据表格吧?
京剧
已有 1 人评分学术水平 热心指数 收起 理由
jiao_taishan + 1 + 1 清晰专业

总评分: 学术水平 + 1  热心指数 + 1   查看全部评分

使用道具

藤椅
jiao_taishan 发表于 2011-8-13 09:28:24 |只看作者 |坛友微信交流群
jingju11 发表于 2011-8-13 04:55
syslast 给出的是最新的数据集名字。在这里应该是outp=生成的数据集。另外syslast的数据集名统一为大写。在 ...
谢谢~我昨晚把那条if语句删了,倒是可以运行。我试试大侠的方法
常用统计数据来源:中国统计月报,中国经济景气月报

使用道具

板凳
jiao_taishan 发表于 2011-8-13 10:16:55 |只看作者 |坛友微信交流群
jingju11 发表于 2011-8-13 04:55
syslast 给出的是最新的数据集名字。在这里应该是outp=生成的数据集。另外syslast的数据集名统一为大写。在 ...
删除outp之后确实可以运行,非常感谢
常用统计数据来源:中国统计月报,中国经济景气月报

使用道具

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

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

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

GMT+8, 2024-4-28 02:58