Changes between Initial Version and Version 1 of FourthQuery


Ignore:
Timestamp:
10/17/06 14:15:42 (12 years ago)
Author:
detwiler
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • FourthQuery

    v1 v1  
     1{{{ 
     2(: variable to specify threshold for dividing between younger and older patients :) 
     3let $age_threshold := 50 
     4 
     5(: gather all patients with naming errors :) 
     6let $patients_with_naming_errors := 
     7        dxq:csm(" 
     8                <results> 
     9                { 
     10                        for $p in $pv/patient[surgery/csmstudy/trial[stimulated='Y']/trialcode/term[type='CSM error code']] 
     11                        return  
     12                                <patient> 
     13                                        {$p/pnum} 
     14                                        {$p/sex} 
     15                                        <age>{data($p/age_at_registration)}</age> 
     16                                        { 
     17                                                for $trial in $p/surgery/csmstudy/trial[stimulated='Y'] 
     18                                                where exists($trial/trialcode/term[type='CSM error code']) 
     19                                                return  
     20                                                        <trial> 
     21                                                                {$trial/_oid} 
     22                                                                <trialcodes> 
     23                                                                { 
     24                                                                        for $code in $trial/trialcode/term[type='CSM error code']/abbrev 
     25                                                                        return 
     26                                                                                <trialcode>{$code/text()}</trialcode> 
     27                                                                } 
     28                                                                </trialcodes> 
     29                                                        </trial> 
     30                                        } 
     31                                </patient> 
     32                }  
     33                </results> 
     34        ") 
     35         
     36(: divide patients with naming errors into younger and older groups :) 
     37let $younger_patients := $patients_with_naming_errors//patient[number(age)<$age_threshold] 
     38let $older_patients := $patients_with_naming_errors//patient[number(age)>=$age_threshold] 
     39 
     40(: generate lists of NUMERIC error codes exhibited by patients for each group :) 
     41let $y_error_codes :=  
     42        for $error_code in $younger_patients//trialcode/text() 
     43        where string(number($error_code)) != 'NaN' 
     44        return  
     45                $error_code 
     46                 
     47let $o_error_codes :=  
     48        for $error_code in $older_patients//trialcode/text() 
     49        where string(number($error_code)) != 'NaN' 
     50        return  
     51                $error_code 
     52 
     53(: calculate code counts for younger patients :) 
     54let $y_code_counts := 
     55        for $code in distinct-values($y_error_codes) 
     56        let $code_count := count(index-of($y_error_codes,$code)) 
     57        order by -$code_count 
     58        return 
     59        <code_count> 
     60                <code>{$code}</code> 
     61                <count>{$code_count}</count> 
     62        </code_count> 
     63         
     64(: calculate code counts for older patients :) 
     65let $o_code_counts := 
     66        for $code in distinct-values($o_error_codes) 
     67        let $code_count := count(index-of($o_error_codes,$code)) 
     68        order by -$code_count 
     69        return 
     70        <code_count> 
     71                <code>{$code}</code> 
     72                <count>{$code_count}</count> 
     73        </code_count> 
     74         
     75return 
     76<results> 
     77        <younger_patients> 
     78        { 
     79                for $code_count in $y_code_counts 
     80                let $code_percentage :=  
     81                        (: format to 2 significant figures after the decimal :) 
     82                        let $full_code_percentage := string($code_count/count div count($y_error_codes) * 100) 
     83                        return 
     84                                concat(substring-before($full_code_percentage,'.'),'.', 
     85                                        substring(substring-after($full_code_percentage,'.'),1,2)) 
     86                return 
     87                        <code>{concat($code_count/code, ' at ',$code_percentage,'%')}</code> 
     88        } 
     89        </younger_patients> 
     90        <older_patients> 
     91        { 
     92                for $code_count in $o_code_counts 
     93                let $code_percentage :=  
     94                        (: format to 2 significant figures after the decimal :) 
     95                        let $full_code_percentage := string($code_count/count div count($o_error_codes) * 100) 
     96                        return 
     97                                concat(substring-before($full_code_percentage,'.'),'.', 
     98                                        substring(substring-after($full_code_percentage,'.'),1,2)) 
     99                return 
     100                        <code>{concat($code_count/code, ' at ',$code_percentage,'%')}</code> 
     101        } 
     102        </older_patients> 
     103</results> 
     104}}}