Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Scoring EORTC Q30 in STATA

    Hi I am trying to score the EORTC Q30 quality of life survey for cancer patients. The scoring manu stated that I can use the "qlqscal 3" command, but I don't think that I have the ado file in my STATA10. Any suggestions?

  • #2
    There is a bunch of Stata code listed starting on p. 67 of http://www.eortc.be/qol/files/SCManualQLQ-C30.pdf. Is that what you want? I assume you would copy and paste it into ado files.
    -------------------------------------------
    Richard Williams, Notre Dame Dept of Sociology
    StataNow Version: 19.5 MP (2 processor)

    EMAIL: [email protected]
    WWW: https://www3.nd.edu/~rwilliam

    Comment


    • #3
      Thanks this looks right direction, but still need to figure out how to create ado files

      Comment


      • #4
        Hello,

        I am trying to score survey data for EORTC QLQ C-30 and HN-35 questionnaires using Stata and the codes provided by the scoring manual: http://www.eortc.be/qol/files/SCManualQLQ-C30.pdf

        I have created the three .ado files (qlqsub, qlqscal, hnscal) and they are saved in my personal directory; they show up correctly when using -personal dir-. The variable names in my .dta file are per the manual. However, when I use command -qlqscal 3- as prompted by the manual, nothing happens and no error message is displayed. I am using Stata version 15. I am a novice to Stata and I thank you in advance for any advice on how to address this.

        qlqsub.ado
        Code:
        cap prog drop qlqsub
        program define qlqsub
        version 5.0
        parse "`*'",parse("'()")
        
        local scale="`1'"
        capture confirm new v `1'
        if _rc!=0 {
            drop `1'
            disp "Replacing existing variable `1'" 
        }
        local i1=index("`1'"," ")+1
        if substr("`1'",`i1',1)~="" {disp in red "Syntax error in code: scale
        <`scale'>" }
        if ("`2'" =="'" & "`4'"=="'" ) { local scalnam="`3'" }
        else disp in red "Syntax error in code: <`2'`3'`4'> in scale `scale'"
        
        if ("`6'" =="(" & "`8'"==")" ) { local varlist="`7'" }
        else disp in red "Syntax error in code: QLQ varlist in scale `scale'"
        local scr1="`5'"
        local fscale=index(upper("`9'"),"FSCALE")>0
        local xmiss=index(upper("`9'"),"XMISS")>0 | index(upper("$userop"),"XMISS")>0
        if `xmiss'==1 {
         disp "Scales with missing items are scored as missing (`scale’)"}
        parse "`scr1'",parse(" ")
        confirm integer n `1'
        local nitems=`1'
        confirm integer n `2'
        local irange=`2'
        local maxval=`irange'+1
        
        parse "`varlist'",parse(", ")
        local nn=0
        while "`1'"~="" {
            if "`1'"~=","{
            local nn=`nn'+1
            local qlqvars="`qlqvars'"+" "+"`1'"
            }
        macro shift }
        if `nn'~=`nitems' {
         disp in red "Syntax error - not `nitems' items in scale `scale'"}
        confirm v `qlqvars'
        
        /* ================ end of syntax parsing and checking =========== */
        
        * Check data for out of range values.
        local rhs="`qlqvars'"
        while "`rhs'"~="" {
            parse "`rhs'",parse(" ")
            local var1="`1'"
            macro shift
            local rhs="`*'"
            quietly summ `var1'
            if _result(5)<1|_result(6)>`maxval' {
                 disp "Out-of-range values of `var1': set to missing"
                 replace `var1'=. if !( `var1'>0 & `var1'<=`maxval' )
            }
         }
        
        * Calculate scale values
        quietly {
        tempvar xmean, xnum fscalev
        egen `xnum'=robs(`qlqvars')
        if `nitems'==1 {gen `xmean'=`qlqvars' }
        else egen `xmean'=rmean(`qlqvars')
        
        gen `fscalev'=((`xmean'-1.0)/`irange')*100. if `xnum'>=`nitems'/2
        replace `fscalev' =. if `xmiss'==1 & `xnum'<`nitems'
        
        if `fscale'==1 {replace `fscalev' = 100.0 - `fscalev'}
        gen `scale' = `fscalev'
        format `scale' %6.2f
        label var `scale' "`scalnam'"
        }
        end
        
        * QLQSUB finished.
        qlqscal
        Code:
        program define qlqscal
        version 5.0
        parse "`*'",parse(" '()")
        #delimit ;
        local qlq = `1';
        global userop = "`2'";
        
        if (`qlq' == 3) {
        qlqsub QL2 'Global health status/QoL'             2 6 (q29,q30)         ;
        qlqsub PF2 'Physical Function'                 5 3 (q1,q2,q3,q4,q5)     FSCALE ;
        qlqsub RF2 'Role Function'                 2 3 (q6,q7)         FSCALE ;
        qlqsub EF 'Emotional Function'                 4 3 (q21,q22,q23,q24)     FSCALE ;
        qlqsub CF 'Cognitive Function'                 2 3 (q20,q25)         FSCALE ;
        qlqsub SF 'Social Function'                 2 3 (q26,q27)         FSCALE ;
        qlqsub FA 'Fatigue'                     3 3 (q10,q12,q18)     ;
        qlqsub NV 'Nausea / vomiting'                 2 3 (q14,q15)         ;
        qlqsub PA 'Pain'                     2 3 (q9,q19)         ;
        qlqsub DY 'Dyspnoea'                     1 3 (q8)         ;
        qlqsub SL 'Insomnia'                     1 3 (q11)         ;
        qlqsub AP 'Appetite loss'                 1 3 (q13)        ;
        qlqsub CO 'Constipation'                 1 3 (q16)         ;
        qlqsub DI 'Diarrhoea'                     1 3 (q17)         ;
        qlqsub FI 'Financial problems'                 1 3 (q28)         ;
        };
        
        if (`qlq' == 2) {
        qlqsub QL2 'Global health status/QoL'             2 6 (q29,q30)         ;
        qlqsub PF 'Physical Function'                 5 1 (q1,q2,q3,q4,q5)     FSCALE ;
        qlqsub RF2 'Role Function'                 2 3 (q6,q7)         FSCALE ;
        qlqsub EF 'Emotional Function'                 4 3 (q21,q22,q23,q24)     FSCALE ;
        qlqsub CF 'Cognitive Function'                 2 3 (q20,q25)         FSCALE ;
        qlqsub SF 'Social Function'                 2 3 (q26,q27)         FSCALE ;
        qlqsub FA 'Fatigue'                     3 3 (q10,q12,q18)     ;
        qlqsub NV 'Nausea / vomiting'                 2 3 (q14,q15)         ;
        qlqsub PA 'Pain'                     2 3 (q9,q19)         ;
        qlqsub DY 'Dyspnoea'                     1 3 (q8)         ;
        qlqsub SL 'Insomnia'                     1 3 (q11)         ;
        qlqsub AP 'Appetite loss'                 1 3 (q13)         ;
        qlqsub CO 'Constipation'                 1 3 (q16)         ;
        qlqsub DI 'Diarrhoea'                     1 3 (q17)         ;
        qlqsub FI 'Financial problems'                 1 3 (q28)         ;
        };
        
        if (`qlq' == 303) {
        qlqsub QL2 'Global health status/QoL'             2 6 (q32,q33)         ;
        qlqsub QL 'Global health status/QoL'             2 6 (q31,q33)         ;
        qlqsub PF 'Physical Function'                 5 1 (q1,q2,q3,q4,q5)     FSCALE ;
        qlqsub RF2 'Role Function'                 2 3 (q26,q27) FSCALE     ;
        qlqsub RF 'Role Function'                 2 1 (q6,q7)         FSCALE ;
        qlqsub EF 'Emotional Function'                 4 3 (q21,q22,q23,q24)     FSCALE ;
        qlqsub CF 'Cognitive Function'                 2 3 (q20,q25)         FSCALE ;
        qlqsub SF 'Social Function'                 2 3 (q28,q29)         FSCALE ;
        qlqsub FA 'Fatigue'                     3 3 (q10,q12,q18)     ;
        qlqsub NV 'Nausea / vomiting'                 2 3 (q14,q15)         ;
        qlqsub PA 'Pain'                     2 3 (q9,q19)         ;
        qlqsub DY 'Dyspnoea'                     1 3 (q8)         ;
        qlqsub SL 'Insomnia'                     1 3 (q11)         ;
        qlqsub AP 'Appetite loss'                 1 3 (q13)         ;
        qlqsub CO 'Constipation'                 1 3 (q16)         ;
        qlqsub DI 'Diarrhoea'                     1 3 (q17)         ;
        qlqsub FI 'Financial problems'                 1 3 (q30)         ;
        };
        
        if (`qlq' == 1) {
        qlqsub QL 'Global health status/QoL'             2 6 (q29,q30)         ;
        qlqsub PF 'Physical Function'                 5 1 (q1,q2,q3,q4,q5)     FSCALE ;
        qlqsub RF 'Role Function'                 2 1 (q6,q7)         FSCALE ;
        qlqsub EF 'Emotional Function'                 4 3 (q21,q22,q23,q24)     FSCALE ;
        qlqsub CF 'Cognitive Function'                 2 3 (q20,q25)         FSCALE ;
        qlqsub SF 'Social Function'                 2 3 (q26,q27)         FSCALE ;
        qlqsub FA 'Fatigue'                     3 3 (q10,q12,q18)     ;
        qlqsub NV 'Nausea / vomiting'                 2 3 (q14,q15)         ;
        qlqsub PA 'Pain'                     2 3 (q9,q19)         ;
        qlqsub DY 'Dyspnoea'                     1 3 (q8)         ;
        qlqsub SL 'Insomnia'                     1 3 (q11)         ;
        qlqsub AP 'Appetite loss'                 1 3 (q13)         ;
        qlqsub CO 'Constipation'                 1 3 (q16)         ;
        qlqsub DI 'Diarrhoea'                     1 3 (q17)         ;
        qlqsub FI 'Financial problems'                 1 3 (q28)         ;
        };
        end;
        hnscal
        Code:
        program define hnscal
        version 5.0
        parse "`*'",parse(" '()")
        #delimit ;
        global userop = "`1'";
        
        *Function scales;
        * none;
        *Symptom scales;
        qlqsub HNPA 'HN Pain'                 4 3 (hn1,hn2,hn3,hn4)         ;
        qlqsub HNSW 'HN Swallowing'             4 3 (hn5,hn6,hn7,hn8)         ;
        qlqsub HNSE 'HN Senses'             2 3 (hn13,hn14)         ;
        qlqsub HNSP 'HN Speech'                3 3 (hn16,hn23,hn24)         ;
        qlqsub HNSO 'HN Social eating'             4 3 (hn19,hn20,hn21,hn22)     ;
        qlqsub HNSC 'HN Social contact'         5 3 (hn18,hn25,hn26,hn27,hn28)    ;
        qlqsub HNSX 'HN Sexuality'             2 3 (hn29,hn30)         ;
        qlqsub HNTE 'HN Teeth'                 1 3 (hn9)             ;
        qlqsub HNOM 'HN Opening mouth'             1 3 (hn10)             ;
        qlqsub HNDR 'HN Dry mouth'             1 3 (hn11)             ;
        qlqsub HNSS 'HN Sticky saliva'             1 3 (hn12)             ;
        qlqsub HNCO 'HN Coughed'             1 3 (hn15)             ;
        qlqsub HNFI 'HN Felt ill'             1 3 (hn17)             ;
        qlqsub HNPK 'HN Pain killers'             1 1 (hn31)             ;
        qlqsub HNNU 'HN Nutritional supp'         1 1 (hn32)             ;
        qlqsub HNFE 'HN Feeding tube'             1 1 (hn33)             ;
        qlqsub HNWL 'HN Weight loss'             1 1 (hn34)             ;
        qlqsub HNWG 'HN Weight gain'             1 1 (hn35)             ;
        end;

        Comment


        • #5
          I wanted to follow up on this matter - I've changed the version in the code to 15.0, but now when I use command -qlqscal 3- as instructed by the manual, I receive error:
          Code:
          program error:  matching close brace not found
          r(198);
          I have ran the code above to check for missing brackets and cannot find any unbalanced expressions. I would really appreciate any assistance with this matter.

          Kindest regards,
          Karolina

          Comment

          Working...
          X