楼主: hsudi
4532 5

请教在宏里如何结束当前循环,进入下一个循环 [推广有奖]

  • 2关注
  • 0粉丝

大专生

38%

还不是VIP/贵宾

-

威望
0
论坛币
1396 个
通用积分
0.1500
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
196 点
帖子
7
精华
0
在线时间
96 小时
注册时间
2007-2-3
最后登录
2024-4-25

楼主
hsudi 发表于 2012-11-18 15:05:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
要判断生成的数据集是否满足正态性,如果不满足正态,重新进入下一个循环:

%macro produce(seed00,miu,sigma2);

前面是种子数据集的过程;

%do nn=1 %to 10;

data data&nn;
set seed&nn;
retain seed;
do j=1 to 30;
x=&miu+normal(seed)*sqrt(&sigma2);
group=1;
output;end;
keep x group;
ods output TestsForNormality=Test&nn(where=(Test="Shapiro-Wilk"));
proc univariate data=data&nn normal;
var x;
run;

data datapb&nn;
set Test&nn;
keep pvalue;
if pvalue<0.05 then leave;
run;

其他过程;

%end;
%mend;

请教我现在用if pvalue<0.05 then leave;都没办法跳出当前的循环,应该怎么样才能使它不满足正态性的话就进入下一循环重新产生新数据集呢?

二维码

扫码加我 拉你入群

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

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

关键词:Univariate normality Produce shapiro Variate 如何

沙发
Imasasor 发表于 2012-11-18 15:34:35
宏就是进行程序控制的,你可以这样做,在data步将pvalue赋给宏变量
call symput("p",pvalue);
然后你要控制下面的程序,如果p<0.05就进行下面的程序就行了,%if &p<0.05 %then %do; ........ %end;
                                                                                          
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

藤椅
hsudi 发表于 2012-11-18 21:17:08
Imasasor 发表于 2012-11-18 15:34
宏就是进行程序控制的,你可以这样做,在data步将pvalue赋给宏变量
call symput("p",pvalue);
然后你要控 ...
谢谢,不过我里面有几个样本,所以合并的样本集需要对每一个样本都做正态性检验,这样的话不止一个p,symput好像只能保留最后一个p?

板凳
bobguy 发表于 2012-11-18 21:58:34
Here is a prototype to exit a loop in a macro.

%macro leaveloop(n);
   %let L=0;
   %let CHKPTV=0.8;
   %let I=0;
   %do  %until(L=1);
      %let I=%eval(&i+1);
      data _null_;
             if ( ranuni(0)- &CHKPTV)>0 or &i-&n=0 then call symputx('L', 1);
          run;
          %put >>>>&i &L &n<<<<;
          %if "&L"="1" %then %goto exit;
        %end;

       
        %exit:

        %mend;

        %leaveloop(5);

报纸
ge79050306 发表于 2012-11-18 22:03:50
不错谢谢

地板
hsudi 发表于 2012-11-19 09:15:35
受到Imasasor的启发,后来用了 call symput来解决了。谢谢大家!


count=0;

data datapb&nn;
set Test_one&nn test_two&nn;
IF PVALUE>0.05 then count+1;
call symput("count",count);
run;

data data&nn;
if &count>=2 then set dataone&nn datatwo&nn;
run;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 23:47