Changes between Initial Version and Version 1 of FourthQuery


Ignore:
Timestamp:
10/17/06 14:15:42 (13 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}}}