format _SEGMNT_ CLS_D2S_.; *****************************************; *** Begin Scoring Code from PROC DMVQ ***; *****************************************; *** Begin Class Look-up, Standardization, Replacement ; drop _dm_bad; _dm_bad = 0; *** Standardize G ; drop T_G ; if missing( G ) then T_G = .; else T_G = (G - 117.361185983827) * 0.0311470971186; *** Standardize SLG ; drop T_SLG ; if missing( SLG ) then T_SLG = .; else T_SLG = (SLG - 0.43440567864593) * 13.4158943513423; *** Standardize AVG ; drop T_AVG ; if missing( AVG ) then T_AVG = .; else T_AVG = (AVG - 0.2688740955684) * 32.4088832276906; *** Standardize OBP ; drop T_OBP ; if missing( OBP ) then T_OBP = .; else T_OBP = (OBP - 0.33311012514627) * 24.4922704190754; *** Standardize AB ; drop T_AB ; if missing( AB ) then T_AB = .; else T_AB = (AB - 397.849056603773) * 0.00662300584074; *** Standardize R ; drop T_R ; if missing( R ) then T_R = .; else T_R = (R - 57.6307277628032) * 0.03459084478306; *** Standardize H ; drop T_H ; if missing( H ) then T_H = .; else T_H = (H - 109.180592991913) * 0.0209770275107; *** Standardize H2 ; drop T_H2 ; if missing( H2 ) then T_H2 = .; else T_H2 = (H2 - 22.0431266846361) * 0.09424433429358; *** Standardize H3 ; drop T_H3 ; if missing( H3 ) then T_H3 = .; else T_H3 = (H3 - 2.24528301886792) * 0.39556216228403; *** Standardize HR ; drop T_HR ; if missing( HR ) then T_HR = .; else T_HR = (HR - 13.8005390835579) * 0.09612257848054; *** Standardize RBI ; drop T_RBI ; if missing( RBI ) then T_RBI = .; else T_RBI = (RBI - 55.1967654986523) * 0.03491192878035; *** Standardize BB ; drop T_BB ; if missing( BB ) then T_BB = .; else T_BB = (BB - 39.8867924528301) * 0.03918973490741; *** Standardize SO ; drop T_SO ; if missing( SO ) then T_SO = .; else T_SO = (SO - 71.4636118598382) * 0.03054843615385; *** Standardize SB ; drop T_SB ; if missing( SB ) then T_SB = .; else T_SB = (SB - 6.4743935309973) * 0.11060572557162; *** End Class Look-up, Standardization, Replacement ; *** Omitted Cases; if _dm_bad then do; _SEGMNT_ = .; Distance = .; goto _vlex ; end; *** omitted; *** Compute Distances and Cluster Membership; label _SEGMNT_ = 'Cluster ID' ; label Distance = ' ' ; array _vads [4] _temporary_; drop _vqclus _vqmvar _vqnvar; _vqmvar = 0; do _vqclus = 1 to 4; _vads [_vqclus] = 0; end; if not missing( T_G ) then do; _vads [1] + ( T_G - -1.15800215325418 )**2; _vads [2] + ( T_G - 0.80443398507119 )**2; _vads [3] + ( T_G - -0.2039543649397 )**2; _vads [4] + ( T_G - 1.03402556770836 )**2; end; else _vqmvar + 1; if not missing( T_SLG ) then do; _vads [1] + ( T_SLG - -0.78459890949339 )**2; _vads [2] + ( T_SLG - -0.0283034698872 )**2; _vads [3] + ( T_SLG - 0.03787994314276 )**2; _vads [4] + ( T_SLG - 1.36277598524818 )**2; end; else _vqmvar + 1; if not missing( T_AVG ) then do; _vads [1] + ( T_AVG - -0.91990751934716 )**2; _vads [2] + ( T_AVG - 0.19971770146323 )**2; _vads [3] + ( T_AVG - 0.22488477881822 )**2; _vads [4] + ( T_AVG - 0.87180038696218 )**2; end; else _vqmvar + 1; if not missing( T_OBP ) then do; _vads [1] + ( T_OBP - -0.8630862154305 )**2; _vads [2] + ( T_OBP - 0.04443482247519 )**2; _vads [3] + ( T_OBP - 0.162641526714 )**2; _vads [4] + ( T_OBP - 1.15034586400641 )**2; end; else _vqmvar + 1; if not missing( T_AB ) then do; _vads [1] + ( T_AB - -1.16611403219053 )**2; _vads [2] + ( T_AB - 0.90926953959004 )**2; _vads [3] + ( T_AB - -0.3196280603981 )**2; _vads [4] + ( T_AB - 1.07864132731894 )**2; end; else _vqmvar + 1; if not missing( T_R ) then do; _vads [1] + ( T_R - -1.09812484573969 )**2; _vads [2] + ( T_R - 0.66794458784755 )**2; _vads [3] + ( T_R - -0.35738092843156 )**2; _vads [4] + ( T_R - 1.44037864282207 )**2; end; else _vqmvar + 1; if not missing( T_H ) then do; _vads [1] + ( T_H - -1.17688822725844 )**2; _vads [2] + ( T_H - 0.80725419514053 )**2; _vads [3] + ( T_H - -0.27296081604935 )**2; _vads [4] + ( T_H - 1.18763574988076 )**2; end; else _vqmvar + 1; if not missing( T_H2 ) then do; _vads [1] + ( T_H2 - -1.01900343038397 )**2; _vads [2] + ( T_H2 - 0.66031145547492 )**2; _vads [3] + ( T_H2 - -0.31145951735168 )**2; _vads [4] + ( T_H2 - 1.23069606972197 )**2; end; else _vqmvar + 1; if not missing( T_H3 ) then do; _vads [1] + ( T_H3 - -0.49258684359898 )**2; _vads [2] + ( T_H3 - 0.52569199000347 )**2; _vads [3] + ( T_H3 - -0.08223731076227 )**2; _vads [4] + ( T_H3 - 0.11751750839842 )**2; end; else _vqmvar + 1; if not missing( T_HR ) then do; _vads [1] + ( T_HR - -0.80064198617706 )**2; _vads [2] + ( T_HR - 0.16954267185119 )**2; _vads [3] + ( T_HR - -0.29884031906075 )**2; _vads [4] + ( T_HR - 1.66303170923635 )**2; end; else _vqmvar + 1; if not missing( T_RBI ) then do; _vads [1] + ( T_RBI - -1.01998678095158 )**2; _vads [2] + ( T_RBI - 0.40412344108152 )**2; _vads [3] + ( T_RBI - -0.29595328456508 )**2; _vads [4] + ( T_RBI - 1.64286710369822 )**2; end; else _vqmvar + 1; if not missing( T_BB ) then do; _vads [1] + ( T_BB - -0.84756333609906 )**2; _vads [2] + ( T_BB - 0.3125222125402 )**2; _vads [3] + ( T_BB - -0.25487494319437 )**2; _vads [4] + ( T_BB - 1.42124512558541 )**2; end; else _vqmvar + 1; if not missing( T_SO ) then do; _vads [1] + ( T_SO - -0.79520388396486 )**2; _vads [2] + ( T_SO - 0.55869617552531 )**2; _vads [3] + ( T_SO - -0.31450798957946 )**2; _vads [4] + ( T_SO - 1.01568212015747 )**2; end; else _vqmvar + 1; if not missing( T_SB ) then do; _vads [1] + ( T_SB - -0.47787727751638 )**2; _vads [2] + ( T_SB - 0.71629390733003 )**2; _vads [3] + ( T_SB - -0.24163744238101 )**2; _vads [4] + ( T_SB - 0.05438573823963 )**2; end; else _vqmvar + 1; _vqnvar = 14 - _vqmvar; if _vqnvar <= 2.2282620193436E-11 then do; _SEGMNT_ = .; Distance = .; end; else do; _SEGMNT_ = 1; Distance = _vads [1]; _vqfzdst = Distance * 0.99999999999988; drop _vqfzdst; do _vqclus = 2 to 4; if _vads [_vqclus] < _vqfzdst then do; _SEGMNT_ = _vqclus; Distance = _vads [_vqclus]; _vqfzdst = Distance * 0.99999999999988; end; end; Distance = sqrt(Distance * (14 / _vqnvar)); end; *** SOM Row and Column; label Row = 'Row' ; label Column = 'Column' ; label SOM_ID = 'SOM ID' ; length SOM_ID $8; if _SEGMNT_ > 0 then do; Row = 1 + floor(( _SEGMNT_ - 1) / 2); Column = 1 + mod( _SEGMNT_ - 1, 2 ); SOM_ID = put( Row ,8. ); SOM_ID = left( SOM_ID ); _vqlen = 1 + length( SOM_ID ); drop _vqlen; substr( SOM_ID , _vqlen , 1 ) = ':'; length _dm8 $8; _dm8 = put( Column , 8. ); _dm8 = left(_dm8); drop _dm8; substr( SOM_ID , _vqlen+1 ) = _dm8; end; else do; Row = .; Column = .; SOM_ID = ' '; end; _vlex :; ***************************************; *** End Scoring Code from PROC DMVQ ***; ***************************************;