Solved
Contributor
Posts: 23

# 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
Posts: 1,270

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

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;``````

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

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

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.