BookmarkSubscribeRSS Feed
mark_ph
Calcite | Level 5

Dear All,

 

I have the following dataset:

 

data have;
   input id date X;
datalines;
1  194503  .
1  194506  .   
1  194509  0.1
2 194703 . 2  194706 0.2 2  194709 0.1
2 194712 0.3
2 194803 0.2;

I would like to compute the rolling standard deviation (STDX)  for different IDs of the variable X using 3 observations (with no less than 2). For example, in row 5 after two observations of X (0.2 and 0.1), I want to compute STDX as 0.05. In row 6, after three observations of X (0.2, 0.1 and 0.3), I wnat to compute STDX as 0.082

 

data want;
   input id date X STDX;
datalines;
1  194503  .    .
1  194506  .    .
1  194509  0.1  .
2 194703 . . 2  194706 0.2 . 2  194709 0.1 0.05
2 194712 0.3 0.082
2 194803 0.2 0.082;

 

My attempt involves proc expand as follows. Yet, I'm not able to get the desired result. Moreover, I'm also getting the following warning: WARNING: The variable X has only 0 nonmissing observations, which is too few to apply
the conversion method. The result series is set to missing.

 

Any help would be highly appreciated. Many thanks!

 

 

PROC EXPAND DATA=have OUT=want;
by id;
convert X=STDX / transformout=(MOVSTD 3 trim 2); 
RUN;
1 REPLY 1
Haikuo
Onyx | Level 15

Proc Expand is an undoubtedly powerful utility tool, however, because it is not a programming tool, it lacks certain level of flexibility  that data step can conveniently offer. 

 

data have;
	input id date X;
	datalines;
1  194503  .
1  194506  .   
1  194509  0.1
2  194703  .
2  194706  0.2
2  194709  0.1
2  194712  0.3
2  194803  0.2
;

data want;
	array _sd(0:2) _temporary_;
	set have;
	by id date;

	if first.id then
		do;
			call missing(of _sd(*));
			_n=0;
		end;

	_n+1;
	_sd(mod(_n,3))=x;

	if n(of _sd(*))>=2 then
		stdx=std(of _sd(*));
		drop _n;
run;

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

What is Bayesian Analysis?

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 1 reply
  • 2566 views
  • 0 likes
  • 2 in conversation