I wonder how can I add variable' obs', which basically is a counter of observation. Below code is not efficient (it is slow to run), plus in case I don't know the total number of observations, what should I put in place of '9'. ?
Thank you
Telescopic
-----------------------------------------------------
data test;
input Year Month Total;
cards;
2009 4 16
2009 5 18
2009 6 12
2009 7 15
2009 8 11
2009 9 12
2009 10 7
2009 11 6
2009 12 9
;
DO i=1 to 9;
num_obs=i;
output;
end;
drop i;
run;
proc print data=test;
run;
SAS will increment the special variable _N_ for every time it loops through the data step. So replace your lines in red with the statement:
OBS = _n_;
Tom already answered your question, other than there is no reason to change your variable name (i.e., num_obs=_n_ will also work). So would num_obs+1 in place of the lines in red.
But I'm concerned that the code you tried "too so long". It wouldn't give you the expected result as it would loop through each case nine times and result with num_obs always equaling 9, but should have run in a fraction of a second and produced 81 records.
Art
Do you need the total number of observations in an additional variable in each observation or do you need the observations position in the dataset?
The variables nlobs and nobs in sashelp.vtable contain the total number of observations in a dataset.
/* get number of obs */
proc sql;
select nlobs into :counter
from sashelp.vtables
where lowcase(libname) = 'work' and lowcase(memname) = 'test';
quit;
/* update dataset */
data work.test;
set work.test;
num_obs = &counter;
run;
Code is not tested!
Thank you all. The Do-loop was wrong. I finally do the following.
----------------------------
data test;
input Year Month Total;
cards;
2009 4 16
2009 5 18
2009 6 12
2009 7 15
2009 8 11
2009 9 12
2009 10 7
2009 11 6
2009 12 9
;
run;
data test_1;
set test;
/*retain counter 0; /*alternative*/
counter=counter+1;*/
OBS=_n_;
RUN;
proc print data=test_1;
run;
Only one data step is needed.
data test;
input Year Month Total;
obs = _n_;
cards;
2009 4 16
2009 5 18
2009 6 12
2009 7 15
2009 8 11
2009 9 12
2009 10 7
2009 11 6
2009 12 9
;
proc print;
run;
Don't miss out on SAS Innovate - Register now for the FREE Livestream!
Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.
Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.
Find more tutorials on the SAS Users YouTube channel.