macro = ; /* This script calculates character statistics for every character on every tree in memory. Results are saved to a comma-delimited CSV file which can be opened directly with MS-Excel. The last lines (Tree = AllTrees) are best indices for every tree in memory. 19.May.2010 - first version by Martin Ramirez - added checking for only one tree ... - (add changes here) */ var = 0 ThisTree 1 ThisChar 2 TheMin 3 TheMax 4 CharSteps 5 CharActiv 6 CharInfo 7 CharDist 8 CharCI 9 CharRI 10 MinCharSteps 11 MinCharDist 12 MaxCharCI 13 MaxCharRI ; if ( ntrees < 0 ) quote * no trees to calculate statistics ; proc/; end report - ; silent = file ; macfloat 5 ; log CharacterScores.csv ; silent - file ; quote Tree, Char, Act, Info, Min, Max, Steps, CI, RI, Distortion; silent = file ; loop 0 ntrees set ThisTree #1 ; loop 0 nchar progress #2 (nchar+1) Calculating indices (tree #1)... ; set ThisChar #2 ; set TheMin minsteps [ 'ThisChar' ] ; set TheMax maxsteps [ 'ThisChar' ] ; set CharActiv isact [ 'ThisChar' ] ; set CharInfo isinfo [ 'ThisChar' ] ; set CharSteps length [ 'ThisTree' 'ThisChar' ] ; set CharDist fit [ 'ThisTree' 'ThisChar' ] ; if ( 'CharActiv' ) if ( 'CharInfo' && ( 'CharSteps' != 0) ) set CharCI ( 'TheMin' / 'CharSteps' ) ; set CharRI ( 'TheMax' - 'CharSteps' ) / ( 'TheMax' - 'TheMin') ; else set CharCI 0 ; set CharRI 0 ; end silent - file ; quote 'ThisTree', 'ThisChar', 'CharActiv', 'CharInfo', 'TheMin', 'TheMax', 'CharSteps', 'CharCI', 'CharRI', 'CharDist'; silent = file ; else silent - file ; quote 'ThisTree', 'ThisChar', 'CharActiv', Null, Null, Null, Null, Null, Null, Null; silent = file ; end stop progress/ ; stop /* this section to calculate best indices for all trees */ if ( ntrees > 0 ) loop 0 nchar set ThisChar #1 ; set MinCharSteps 9999999999 ; set MinCharDist 1 ; set MaxCharCI 0 ; set MaxCharRI 0 ; progress #1 (nchar+1) Calculating summary indices... ; set TheMin minsteps [ 'ThisChar' ] ; set TheMax maxsteps [ 'ThisChar' ] ; set CharActiv isact [ 'ThisChar' ] ; set CharInfo isinfo [ 'ThisChar' ] ; if ( 'CharActiv' ) if ( 'CharInfo' ) loop 0 ntrees set ThisTree #2 ; set CharSteps length [ 'ThisTree' 'ThisChar' ] ; if ( 'CharSteps' < 'MinCharSteps' ) set MinCharSteps 'CharSteps' ; set MinCharDist fit [ 'ThisTree' 'ThisChar' ] ; end stop set MaxCharCI ( 'TheMin' / 'MinCharSteps' ) ; set MaxCharRI ( 'TheMax' - 'MinCharSteps' ) / ( 'TheMax' - 'TheMin') ; else set MinCharSteps 0 ; set MinCharDist 0 ; end silent - file ; quote AllTrees, 'ThisChar', 'CharActiv', 'CharInfo', 'TheMin', 'TheMax', 'MinCharSteps', 'MaxCharCI', 'MaxCharRI', 'MinCharDist'; silent = file ; else silent - file ; quote AllTrees, 'ThisChar', 'CharActiv', Null, Null, Null, Null, Null, Null, Null; silent = file ; end stop progress/ ; end log/; report = ; report + 1 ; quote -------------------------------------------------------------------------- ; quote Character statistics saved to file CharacterScores.csv (opens in MS-Excel) ; quote -------------------------------------------------------------------------- ; proc/;