data s2;
retain sum;
assign = sum;
sum + 1;
proc print; run;
*Anyone knows why here:*
assign=. whereas
sum=1
because when we apply the + operator with any missing value the final result should be. (missing)
If you use a variable as the target in a SUM statement then the variable will be retained and it will default to initialize to zero , UNLESS YOU TELL TO INITIALIZE TO SOMETHING ELSE.
Remove the RETAIN statement. Of tell it to initialize to zero instead of missing.
19 data s2; 20 retain sum; 21 assign = sum; 22 sum + 1; 23 put (_all_) (=); 24 run; sum=1 assign=. NOTE: The data set WORK.S2 has 1 observations and 2 variables. NOTE: DATA statement used (Total process time): real time 0.03 seconds cpu time 0.04 seconds 25 data s2; 26 assign = sum; 27 sum + 1; 28 put (_all_) (=); 29 run; assign=0 sum=1 NOTE: The data set WORK.S2 has 1 observations and 2 variables. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.03 seconds 30 data s2; 31 retain sum 100; 32 assign = sum; 33 sum + 1; 34 put (_all_) (=); 35 run; sum=101 assign=100 NOTE: The data set WORK.S2 has 1 observations and 2 variables. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds
The SUM statement documentation says the variable (in this case SUM) is initialized to zero. So sum+1 is not missing.
Please explain
If you use a variable as the target in a SUM statement then the variable will be retained and it will default to initialize to zero , UNLESS YOU TELL TO INITIALIZE TO SOMETHING ELSE.
Remove the RETAIN statement. Of tell it to initialize to zero instead of missing.
19 data s2; 20 retain sum; 21 assign = sum; 22 sum + 1; 23 put (_all_) (=); 24 run; sum=1 assign=. NOTE: The data set WORK.S2 has 1 observations and 2 variables. NOTE: DATA statement used (Total process time): real time 0.03 seconds cpu time 0.04 seconds 25 data s2; 26 assign = sum; 27 sum + 1; 28 put (_all_) (=); 29 run; assign=0 sum=1 NOTE: The data set WORK.S2 has 1 observations and 2 variables. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.03 seconds 30 data s2; 31 retain sum 100; 32 assign = sum; 33 sum + 1; 34 put (_all_) (=); 35 run; sum=101 assign=100 NOTE: The data set WORK.S2 has 1 observations and 2 variables. NOTE: DATA statement used (Total process time): real time 0.00 seconds cpu time 0.00 seconds
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.