***********************************************************************; * Version 3.1 July 20, 1994 *; ***********************************************************************; START _GETCSS_(INCLUDE, EXCLUDE, _SSCOR_, _CORNM_, _ECODE_,_OPT_, _PARM_,_VNAME_,_VTYPE_,_SS_,_SUMSQ_ ); *___________________________________________________________________* This routine creates _SS_, _VTYPE_, and _PARM_ from _SSCOR_. It allows the user to select a subset of _SSCOR_ for analysis. Inputs INCLUDE EXCLUDE Outputs _SSCOR_, _CORNM_ , _ECODE_, _OPT_, _PARM_, _VNAME_, _VTYPE_, _SS_, _SUMSQ_ *___________________________________________________________________*; FREE _PARM_ _VNAME_ _VTYPE_ _SS_ _SUMSQ_ ; * Some modest input validity checks; IF (NROW(_ECODE_)=0)|(NROW(_OPT_ )=0) THEN DO; IF _OPT_(|1,6|)=0 THEN PRINT "One or more system matrix does not exist. " , "_ECODE_ and _OPT_ were checked. " ,, "------------GETCORSS, LINMOD, and IML stopped.------------" , "------------GETCORSS, LINMOD, and IML stopped.------------" , "------------GETCORSS, LINMOD, and IML stopped.------------" ; ABORT; END; IF _OPT_(| 1 , 5 |) = 0 THEN DO; NOTEG_0 = { "**************************************" , "** BEGIN GETCORSS **" , "**************************************" } ; IF _OPT_(|1,6|)=0 THEN PRINT NOTEG_0 , ; END; _ECODE_ (| {3 4 5 6} , 1 |) = 0; IF NROW( _SSCOR_ ) = 0 | NROW( _CORNM_ ) = 0 THEN DO; IF _OPT_(|1,6|)=0 THEN PRINT , "GETCORSS: _SSCOR_ or _CORNM_ not defined. " " _SS_ and related matrices not created."; _ECODE_ (| 3 , 1 |) = 9001; RETURN; END; _PARM_ = J( 1 , 5 , 0 ); _J_=NROW( _SSCOR_ ); _PARM_(| 1 , 1 |) = _SSCOR_(| _J_ , 1 |); IF MAX(ABS( J( 1,NCOL(_SSCOR_),_PARM_(|1,1|) ) - _SSCOR_(| _J_ , * |) )) > 0 THEN DO; _ECODE_ (| 3 , 1 |) = 9005; IF _OPT_(|1,6|)=0 THEN PRINT ,, "GETCORSS: Sample size not the same for all variables"; END; IF (NROW(INCLUDE)>0) & (NROW(EXCLUDE)>0) THEN DO; NOTEG_1={"GETCORSS: INCLUDE and EXCLUDE have both been specified" , " : Only one may be specified -- _SS_ not created"}; IF _OPT_(|1,6|)=0 THEN PRINT ,, NOTEG_1 ; _ECODE_ (| 3 , 1 |) = 9003; END; IF ( _ECODE_(| 3 , 1 |) > 9000 ) THEN RETURN; IF NROW( INCLUDE ) > 0 THEN DO; _BIG_ = UPCASE(_CORNM_); _LITTLE_ = UPCASE(INCLUDE); _INDEX_ = _SCAN_( _BIG_, _LITTLE_ ); IF ANY(_INDEX_= . ) THEN DO; NOTEG_2={"GETCORSS: No match found for element (S) of INCLUDE" , " : _SS_ not created" } ; IF _OPT_(|1,6|)=0 THEN PRINT , NOTEG_2 ; _ECODE_ (| 3 , 1 |) = 9002; END; END; IF NROW(EXCLUDE)>0 THEN DO; _BIG_ =UPCASE(_CORNM_); _LITTLE_ = UPCASE(EXCLUDE); _INDEX_ = _UNSCAN_( _BIG_, _LITTLE_ ); IF ANY(_INDEX_= . ) THEN DO; NOTEG_3={"GETCORSS: No match found for one or more elements of" , " : EXCLUDE. _SS_ not created" } ; IF _OPT_(|1,6|)=0 THEN PRINT , NOTEG_3 ; _ECODE_ (| 3 , 1 |) = 9004; END; END; IF ( NROW( EXCLUDE ) = 0 ) & ( NROW( INCLUDE ) = 0 ) THEN DO; _INDEX_ = 1 : NCOL( _SSCOR_ ); NOTEG_4={"GETCORSS: INCLUDE and EXCLUDE not specified." , " : All elements of _SSCOR_ will be used in _SS_"}; IF (_OPT_(|1,5|)=0)&(_OPT_(|1,6|)=0) THEN PRINT , NOTEG_4 ; END; IF ( _ECODE_(| 3 , 1 |) > 9000 ) THEN RETURN; _PARM_ = J( 1 , 5 , 0 ); _PARM_ (| 1 , 1 |) = _SSCOR_(| NROW( _SSCOR_ ) , 1 |); _PARM_ (| 1 , 4 |) = NCOL( _SSCOR_ ); _ECODE_ = J( NROW(_ECODE_) , 1 , 0 ); _VTYPE_ = J( 1 , NCOL( _INDEX_ ) , 0 ); _VNAME_ = _CORNM_(| 1 , _INDEX_ |); _SS_ = _SSCOR_(| _INDEX_ , _INDEX_ |); _SUMSQ_ = VECDIAG( _SS_ )`; IF _OPT_(| 3 , 1 |)&(_OPT_(|1,6|)=0) THEN DO; RUN _PRPARM_( _PARM_ ); RUN _PVTYPE_( _VTYPE_, _VNAME_ ); END; IF _OPT_(| 3 , 2 |)&(_OPT_(|1,6|)=0) THEN PRINT , "_SS_ Matrix" , _SS_(|COLNAME=_VNAME_ ROWNAME=_VNAME_ &_FMT2_|) ; FINISH _GETCSS_ ;