*! 1.0.0 NJC 9 April 2004
program circovstr, sort rclass  
        version 8.0
        syntax varname(numeric) [if] [in]  [, noLIST * ] 
	
	quietly { 
		marksample touse
		count if `touse' 
		if r(N) == 0 error 2000
		else local N = r(N) 

		tempvar xsum ysum vstr tag  
		tempname XSUM YSUM veclng vecstr 

		bysort `touse' (`varlist') : ///
			gen `xsum' = sum(sin((`varlist' * _pi) / 180))
		by `touse' : replace `xsum' = `xsum'[_N]  	
		by `touse' : gen `ysum' = sum(cos((`varlist' * _pi) / 180))
		by `touse' : replace `ysum' = `ysum'[_N] 
		
		scalar `XSUM' = `xsum'[_N]
		scalar `YSUM' = `ysum'[_N]
		scalar `veclng' = sqrt((`XSUM')^2 + (`YSUM')^2)
		scalar `vecstr' = `veclng' / `N'
		local vecshow : di %4.3f scalar(`vecstr') 

		replace `xsum' = `xsum' - sin((`varlist' * _pi) / 180) 
		replace `ysum' = `ysum' - cos((`varlist' * _pi) / 180) 
		gen `vstr' = sqrt((`xsum')^2 + (`ysum')^2) / (`N' - 1) if `touse' 
		bysort `touse' `varlist' : gen byte `tag' = _n == 1 
		char `vstr'[varname] "strength without"
		label var `vstr' "vector strength omitting value" 
		format `vstr' %4.3f 
	} 
	
	circscatter `vstr' `varlist' if `tag' & `touse' ///
		,  yli(`=`vecstr'', lp(dash))           ///
		subtitle("vector strength for all `vecshow'", place(w)) ///
		`options'
	
	if "`list'" == "" { 
		list `varlist' `vstr' if `tag' & `touse' ///
		, subvarname abb(16) noobs
	} 	
	
	return scalar N = `N'
	return scalar veclng = `veclng'
	return scalar vecstr = `vecstr'
end