INPUT | SET | RETAIN | IF THEN DO | CALL SYMPUTX | SYMGET
/*Store the average dose for drug A in a macro variable using CALL SYMPUTX.*/
/*Retrieve it in another DATA step using SYMGET.*/
DATA DRUGDOSE;
INPUT USUBJID DRUG$ DOSE;
CARDS;
101 A 50
102 B 75
103 A 100
;
RUN;
PROC PRINT;RUN;
OUTPUT:
| Obs | USUBJID | DRUG | DOSE |
|---|---|---|---|
| 1 | 101 | A | 50 |
| 2 | 102 | B | 75 |
| 3 | 103 | A | 100 |
DATA NEW;
SET DRUGDOSE END=LAST;
RETAIN TOTAL DOSE_COUNT;
IF DRUG='A' THEN DO;
TOTAL+DOSE;
DOSE_COUNT+1;
END;
IF LAST THEN DO;
IF DOSE_COUNT > 0 THEN
CALL SYMPUTX('AVG_A',TOTAL/DOSE_COUNT);
END;
RUN;
PROC PRINT;RUN;
OUTPUT:
| Obs | USUBJID | DRUG | DOSE | TOTAL | DOSE_COUNT |
|---|---|---|---|---|---|
| 1 | 101 | A | 50 | 50 | 1 |
| 2 | 102 | B | 75 | 50 | 1 |
| 3 | 103 | A | 100 | 150 | 2 |
DATA AVG;
AVG_A=SYMGET('AVG_A');
RUN;
PROC PRINT;RUN;
OUTPUT:
| Obs | AVG_A |
|---|---|
| 1 | 75 |
PRACTICE AND COMMENT YOUR CODE:
-->PLEASE FOLLOW OUR BLOG FOR MORE UPDATES.
TO FOLLOW OUR TELEGRAM CHANNEL CLICK HERE
No comments:
Post a Comment