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;
Comments
Post a Comment