15.RETAIN AND SUM STATEMENT

                           15.RETAIN AND SUM STATEMENT


1.CREATING AN ACCUMULATING(OVERALL) TOTAL VARIABLE


2.ACCUMULATING TOTAL FOR GROUPING THE DATA


    1.RETAIN STATEMENT

    2.SUM STATEMENT



    1.RETAIN(HOLDING THE VALUE) STATEMENT


-->IT WILL RETAIN VALUE OF VARIABLE IN PDV ACROSS THE ITERATION OF DATASET

-->IT WILL INITIALIZE THE RETAIN VALUE TO 'MISSING/ZERO' BEFORE THE FIRST EXECUTION

-->IF THERE IS A MISSING VALUE IN  VARIABLE ,ALL VARIABLE VALUES WILL BE MISSING



DATA SAS;

INPUT ID SALARY;

CARDS;

101 25000

102 26000

103 27000

104 18000

105 28000

106 23000

107 29000

108 30000

109 31000

110 34000

;

RUN;

PROC PRINT;

RUN;


DATA SWA;

SET SAS;

TOTAL=SALARY+TOTAL;

RUN;

PROC PRINT;

RUN;


DATA SWA11;

SET SAS;

TOTAL=0;

TOTAL=SALARY+TOTAL; *25000+0=25000 26000+0=26000;

RUN;

PROC PRINT;

RUN;


DATA S;

SET SASHELP.CLASS;

AGENEW=0;

TOTAL=AGE+AGENEW;

RUN;

PROC PRINT;

RUN;


TO AVOID THIS CONDITION USE 'RETAIN' STATEMENT 


DATA SWA12;

SET SAS;

RETAIN TOTAL 0;

TOTAL=SALARY+TOTAL; *25000+0=25000 25000+26000=51000;

RUN;

PROC PRINT;

RUN;


WHAT IF THE VALUES ARE MISSING IN  THE DATA???

--->ALL VARIABLE VALUES WILL BE MISSING


DATA SAS12;

INPUT ID SALARY;

CARDS;

101 25000

102 26000

103 27000

104   .  

105 28000

106 23000

107 29000

108 30000

109 31000

110 34000

;

RUN;

PROC PRINT;

RUN;


DATA EWSS;

SET SAS12;

RETAIN TOTAL 0;

TOTAL=TOTAL+SALARY;

RUN;

PROC PRINT;

RUN;



WHAT IF THE DATA MISSING AT FIRST OBS??

-->ALL VALUES ARE MISSING


DATA SAS12;

INPUT ID SALARY;

CARDS;

101   .  

102   .  

103 27000

104 28000

105 28000

106 23000

107 29000

108 30000

109 31000

110 34000

;

RUN;

PROC PRINT;

RUN;


DATA EWSS;

SET SAS12;

RETAIN TOTAL 0;

TOTAL=TOTAL+SALARY;

RUN;

PROC PRINT;

RUN;


2.SUM


-->"AUTOMATICALLY IT WILL RETAIN" THE VARIABLE VALUES

-->HERE IT WILL CREATE 'NEW VARIABLE' VALUE ON THE LEFT SIDE OF PLUS(+) SIGN

            *WHERE IF THEN SUM;

                    EX::TOTAL+SALARY

-->INITIALIZE THE VALUE TO ZERO

-->**IT WILL "IGNORES THE MISSING" VALUES AND GIVE TOTAL/SUM OF THE OBS/VALUES



DATA SAS;

INPUT ID SALARY;

CARDS;

101 25000

102 26000

103 27000

104 18000

105 28000

106 23000

107 29000

108 30000

109 31000

110 34000

;

RUN;

PROC PRINT;

RUN;


DATA SUMM;

SET SAS;

TOTAL+SALARY;

RUN;

PROC PRINT;

RUN;


WHAT IF MISSING VALUES ARE IN OBS?

-->IT WILL WRITE THE VALUE BY ADDING THE NEXT SUM


DATA SAS;

INPUT ID SALARY;

CARDS;

101 25000

102 26000

103 .    

104 18000

105 28000

106 23000

107 29000

108 30000

109 31000

110 34000

;

RUN;

PROC PRINT;

RUN;


DATA WQW;

SET SAS;

TOTAL+SALARY;

RUN;

PROC PRINT;

RUN;


DATA SAS122;

INPUT ID SALARY;

CARDS;

101   .  

102   .  

103 27000

104 28000

105 28000

106 23000

107 29000

108 30000

109 31000

110 34000

;

RUN;

PROC PRINT;

RUN;


DATA WQW1;

SET SAS122;

TOTAL+SALARY;

RUN;

PROC PRINT;

RUN;


DATA WE;

INPUT AGE AGEN;

CARDS;

11 2

12 3

13 2

14 4

15 2

;

RUN;

PROC PRINT;

RUN;


-->NEED TOTAL WITH SUM STATEMENT


DATA OIY;

SET WE;

TOTAL+AGE+AGEN;

TOTAL=SUM(OF AGE,AGEN);

RUN;

PROC PRINT;

RUN;


   PLEASE FOLLOW THE BLOG FOR MORE INFORMATION...


Comments