作者tew (咖啡王子)
站内Statistics
标题Re: [程式] 请问如何让SAS清楚秀出跑几次了
时间Mon Apr 12 23:48:57 2010
我写一个简单的模拟语法
给你做个参考
%macro a;
%do i=1 %to 10000;
data a;
do i=1 to 100;
a=rannor(&i);
output;
end;
run;
proc means noprint data=a;
var a;
output out=b&i mean=a;
run;
%end;
%mend;
%a;
该语法是一个模拟语法
计算出10000次 每次模拟100个标准常态分配的数值的平均数
会产生出10000个档案的数值
但是有更简便的方法
data a;
do j=1 to 10000;
do i=1 to 100;
a=rannor(1);
output;
end;
end;
run;
proc means noprint data=a;
var a;
by j;
output out=b mean=a;
run;
该语法的作用和前面的巨集一样
但是 时间会缩短很多
如果你的资料特徵是可以利用by来处理
那就不要执着一定要用巨集
基本上我之前也做过模拟时间序列的东西
最早写的语法要花50分钟才跑完 那时候真的觉得模拟是一件很困难的事情
但是後来 改成後者的语法
只要5分钟
所以 虽然你的语法是正确的
但是可以思考一下 能不能采用by的语法来执行
若可以 那就稍微修改一下程式吧
会让你的速度变快很多
※ 引述《coolsweetie ()》之铭言:
: [软体程式类别]:
: SAS
: [软体熟悉度]:
: 中(3个月到1年)
: [问题叙述]:
: 写了一个Do回圈,让SAS跑1000次的模拟,但是跑好久跑得我无所适从,
: 想说如果可以知道现在times跑到第几次了,等待时心里也比较有个底。
: 因此放了一个 %Put × 在程式里,希望SAS可以在Log秀出现在跑到第几次了。
: 可是log画面跳得很快,我还得在一大堆的讯息里快速看出现在跑到第几次,
: 实在好伤眼力啊,想请问一下板上网友,有没有更好的方法?谢谢。
: 现在主要程式是这样:
: %macro Simulation;
: %DO Times = 1 %TO 1000;
: ...
: ...
: ...
: %Put &Times;
: %End;
: %MEND Simulation;
: 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.44.202.26
※ 编辑: tew 来自: 114.44.202.26 (04/12 23:56)
※ 编辑: tew 来自: 114.44.202.26 (04/12 23:57)
1F:推 coolsweetie:非常谢谢tew网友的建议,我的程式似乎也可以这样改, 04/13 00:01
2F:→ coolsweetie:我来试试看,再次谢谢你 04/13 00:02
3F:推 kenshin528:谢谢分享 我也学起来 04/13 00:05
4F:推 liton:不用这麽麻烦吧.. option symbolgen; 04/13 00:25
5F:推 lsshno1:请问第二段程式是: a=rannor("i"); 吗? 04/13 20:01
6F:→ tew:just 1 04/13 20:56