DATA Step, Macro, Functions and more

output result of TestsForNormality by do loop variable instead of VarName

Accepted Solution Solved
Reply
Contributor
Posts: 23
Accepted Solution

output result of TestsForNormality by do loop variable instead of VarName

I'm trying to come out a series of normal distribution and tested by Shapiro-Wilks test. The code is as below:

DATA RAND;
DO J=0 TO 9;
    CALL STREAMINIT(123);
        DO i=1 to 50;
	    X=Rand("normal",1.5+0.001*j,0.3);
	    OUTPUT;
	    END;
		    
END;
RUN;	    
/*************************************************
*input = dataset to check;
*vars = Specify variable(s) for which you want to check normality;
*output = dataset to output with normality status;
**************************************************/

%macro normal(input=, vars=, output=);

ods output TestsForNormality = Normal;

proc univariate data = &input normal;

var &vars;



run;

ods output close;

data &output;

set Normal ( where = (Test = 'Shapiro-Wilk'));

if pValue > 0.05 then Status ="Normal";

else Status = "Non-normal";

drop TestLab Stat pType pSign;

run;

%mend;

%normal(input=RAND, vars=X, output=Normality);

But the output data set is only one item by one Varname X from 500 data, not for j between 0 and 9 and from 50 data. Thank you if you can support.


Accepted Solutions
Solution
‎12-26-2017 04:47 PM
Trusted Advisor
Posts: 1,270

Re: output result of TestsForNormality by do loop variable instead of VarName

Posted in reply to Michaelcwang2

Hi,

 

A small change in your macro code will generate the desired results. Just add by statement in proc univariate.

 

proc univariate data = &input normal;

var &vars;

by j; run;

 

View solution in original post


All Replies
Solution
‎12-26-2017 04:47 PM
Trusted Advisor
Posts: 1,270

Re: output result of TestsForNormality by do loop variable instead of VarName

Posted in reply to Michaelcwang2

Hi,

 

A small change in your macro code will generate the desired results. Just add by statement in proc univariate.

 

proc univariate data = &input normal;

var &vars;

by j; run;

 

Contributor
Posts: 23

Re: output result of TestsForNormality by do loop variable instead of VarName

Yes, it works and highly appreciated!
☑ This topic is solved.

Need further help from the community? Please ask a new question.

Discussion stats
  • 2 replies
  • 146 views
  • 0 likes
  • 2 in conversation