Announcement

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

  • Determining blood pressure target goal

    I need help writing Stata code to determine whether or not patients achieved a blood pressure target goal. The goal is systolic < 130 and diastolic < 80. A patient will meet the goal if this is true for the average over the last 2 visits. Otherwise, they did not meet the goal. I have pasted 40 observations from my dataset. The variables are named such that dpb=Diastolic blood pressure and sbp=Systolic blood pressure. The variable names have a number at the end that indicates the month (for example, dbp1 means diastolic blood pressure at month 1). Any help or guidance on writing the code to generate a 0 "did not meet goal " / 1 "met goal" variable will be appreciated.

    Code:
    * Example generated by -dataex-. For more info, type help dataex
    clear
    input float id int(dbp1 sbp1 dbp3 sbp3 dbp6 sbp6 dbp9 sbp9 dbp12 sbp12 dbp15 sbp15 dbp18 sbp18 dbp21 sbp21 dbp24 sbp24 dbp27 sbp27 dbp30 sbp30 dbp33 sbp33 dbp36 sbp36 dbp39 sbp39 dbp42 sbp42 dbp45 sbp45 dbp48 sbp48 dbp51 sbp51 dbp54 sbp54)
     1 81 127  81 111 84 142 85 131 81 148 86 123 82 128 80 122  78 119 76 117 80 118  84 119 98 136  84 127  82 118  79 128 77 121 79 126  .   .
     2 88 124  84 124 89 132 77 120 89 148 87 145 90 156 90 145  88 134 93 146 91 142  86 145 82 134  86 139  96 130   .   . 92 149  .   .  .   .
     3 87 125  79 131 85 117 86 115 77 129 85 131 82 112 79 124  86 118 84 123 77 127  78 118 78 107  86 150  78 119  85 117 79 112  .   .  .   .
     4 77 116  72 106 74 107 75 117 76 110 75 116 70 110 77 115  70 113 68 107 81 119  73 113 78 124   .   .   .   .   .   . 75 113  .   .  .   .
     5 85 116  84 127 82 117 77 109 76 116 87 128 72 116 77 115  83 114 75 117 83 122   .   . 83 125  89 121   .   .   .   .  .   .  .   .  .   .
     6 93 147 100 140 92 141 87 131 88 141 89 141 93 142 92 138  94 138 89 135 84 132  86 131 80 117  88 132  91 135  87 130 87 117  .   . 85 125
     7 84 151  70 117 81 130 91 153 80 122 78 129 85 143 72 121  83 140 74 138 81 166  86 149 78 137  66 139  83 141  87 144 82 149  .   .  .   .
     8 91 137  99 166 82 126 94 145 87 122 75 130 91 134 94 155 102 175  .   .  .   .   .   . 89 148  86 149  94 146 100 167 85 149 86 154 93 151
     9 82 119  88 137 75 122 74 128 81 133 75 119 72 121 88 130  71 120 83 144 83 144  83 129 79 104  80 138  89 129  81 126 84 117 74 116 78 129
    10 86 123  80 127 87 130 87 130 90 135 82 124  .   .  .   .  85 121 91 135 85 135  78 122 88 131  87 132  81 131  84 118 84 122 83 121 79 131
    11 69 106  71 114 62 106 63 101 49  90 56 104 64 106 77 130  72 111 73 117 60 120  62 119 65 109  70 121  64 105  63 107 71 114 71 126  .   .
    12 85 123  82 121 73 104 80 109 76 100 76 104 82 116 85 113  80 113 80 114 76 107  79 123 75 111   .   .  91 132  88 124 86 122  .   .  .   .
    13 88 137  81 118 83 123 70 112 72 108 78 114 83 112 70 125  80 116 78 115 75 117  76 112 72 117  70 117  70 107  72 108 74 112 70 109 76 118
    14 77 123  74 125 65 117 77 134 68 110 73 121 75 129 66 113  68 123 77 130 77 133  69 116 73 125  66 131  74 122  79 136 75 130  .   .  .   .
    15 80 115  82 117 91 130 87 121 87 122  .   . 94 134 97 134  91 121 85 124 84 123   .   . 97 134   .   .  83 128  94 131 99 136 77 127  .   .
    16 79 127  92 130 87 131 83 136 84 145  .   .  .   .  .   .   .   .  .   .  .   .   .   . 93 167   .   .  77 140  87 142 85 143  .   .  .   .
    17 83 128  75 139 76 132 63 106 63 109 80 132 77 135 76 136  70 124 78 130 81 136  74 141 70 142  72 110  80 158  82 141 74 131 73 144  .   .
    18 84 126  80 131 75 116 82 123 66 105 86 134 86 123 87 125  84 125 79 127 86 128  92 142 84 147  74 115  78 115  85 135 87 149 74 111 81 117
    19 82 125  67 120 72 109 82 132 73 121 95 149 80 123 87 129  90 141 81 142 89 144  75 127 75  99  94 153  97 162 108 168 86 135 96 158 87 137
    20 75 108  73 109 73 104 64 115 69  99 68 112 75 110 74 103  71 105 64 104 67 108  74 124 73 122  77 122  76 119  80 126 72 117 68 116  .   .
    21 83 150  82 153 95 167 94 156 94 172 94 145 80 145 91 147  77 140 86 161 92 151   .   . 98 165   .   .   .   .   .   . 92 153  .   .  .   .
    22 82 113  70 101 61  95 71 117 74 113 76 116 78 105 80 123  80 112 75 120 69 108  85 116 80 116  83 119  78 116  80 122 81 105 82 119  .   .
    23 86 128  74 121 82 131 85 136 90 134 89 116 87 137 87 130  84 122 83 158 88 169   .   . 99 153  96 140   .   .   .   .  .   .  .   .  .   .
    24 73 125  67 106 86 136 87 143 76 132 72 123 72 114 73 120  64 120 70 110 76 119  85 135 70 104  68 116  62 122  84 127 73 107 68 129 72 116
    25 66 108  79 121 90 152 85 127 86 138 80 124 89 143 80 128  76 119 80 130  .   .   .   .  .   .   .   .   .   .   .   .  .   .  .   .  .   .
    26 75 125  75 123 80 144 75 129 76 118 76 130 74 135 71 120  75 142  .   . 76 145  84 142 78 133  74 144  76 132  70 125 84 140 77 132  .   .
    27 73 108  71 106 74 110 85 121 78 114 77 113 64 100 67 101  86 114 67  99 57  88  61  90 67  96  73  92  58  94  70 100 63  95  .   .  .   .
    28 84 121  78 124 81 136 74 134 62 121 83 144 75 133 86 140  71 126 80 147 81 120  85 156 87 155  64 139  81 127  74 137 67 106 99 163 83 141
    29 81 116   .   .  .   .  .   .  .   . 74 119 79 119 67 102  88 139 74 113 71 114  79 116 82 132  89 137  80 122  79 120 81 128 95 140 80 124
    30 87 142  81 126 72 127 79 132 75 129 80 125 66 112 77 122  78 125 70 123 82 132  79 131 87 124  84 140  70 131  81 128 85 137 85 143 86 131
    31 96 156  88 134 81 137 82 131 87 142 82 124 80 142 81 153  79 132 85 135 80 141  87 163 86 152  93 166  82 157  84 153 89 159 83 142 88 133
    32 90 137  83 128 84 120 85 111 86 121 84 119 85 125 88 143  89 141 92 141 84 123  96 136 85 134   .   .   .   .   .   . 68 104  .   .  .   .
    33 81 157  83 150 81 134 76 148 85 161 89 142 84 157 84 155  80 154 86 135 87 157  71 126 84 150  82 155  81 148  86 150 84 141  .   .  .   .
    34 85 137  85 146 90 147 88 129 85 141 85 145 93 142 85 127  84 149 89 134 77 141   .   . 71 118  72 130  70 112  69 111 80 137 68 134 64 133
    35 85 151  75 128 78 138 73 139 73 132 72 119 67 132 76 129  63 111 70 105 75 137  65 120 80 143  77 128  78 127  80 138 79 140 72 125 79 139
    36 66 103  73 108 63  99 65 101 72 104 61  98 74 109 68 106  74 102 64  99 75 114  72 103 77 114  67 111  73 115  75 118 67 102 72 106 71 104
    37 70 129  81 127 73 135 76 128 68 128 78 142 76 122 83 140  75 127 88 144 77 143  88 151 79 129  79 127  81 142  84 126 80 147  .   .  .   .
    38 86 158  84 133 80 116 86 126 78 119 75 122 79 107 72 131  75 133 77 134 82 122  80 148 83 125  72 105  78 129  79 125 76 136 81 152  .   .
    39 77 125  80 126 76 131 83 134 89 139 93 144 85 138 88 134 100 138 92 164 95 160 102 166 99 164 104 161 104 152  84 142 86 133  .   .  .   .
    40 88 148  68 119 85 153 86 147 86 140 81 122 77 131 80 128  84 142 89 143 83 144  72 131 82 142  84 129  89 161  85 149 88 155  .   .  .   .
    end

    Last edited by Al Bothwell; 18 Aug 2022, 10:28. Reason: edited a conditional statement on the goal

  • #2
    How about this?

    Code:
    reshape long dbp sbp, i(id) j(month)
    drop if missing(dbp) & missing(sbp)
    
    gen avg_dbp = (dbp + dbp[_n-1])/2
    gen avg_sbp = (sbp + sbp[_n-1])/2
    
    gen met_goal = (avg_sbp < 130 & avg_dbp < 80) if !(missing(avg_sbp) & missing(avg_dbp))
    Last edited by Hemanshu Kumar; 18 Aug 2022, 11:15. Reason: Edited to correct the met_goal condition with an and instead of or.

    Comment


    • #3
      There are several ways to interpret this in detail and several ways to approach this, although my guess is that all the easier ways hinge on reshape long, at least temporarily.

      Here I ignore missing values and work in terms of this visit and the previous visit.

      Code:
      * Example generated by -dataex-. For more info, type help dataex
      clear
      input float id int(dbp1 sbp1 dbp3 sbp3 dbp6 sbp6 dbp9 sbp9 dbp12 sbp12 dbp15 sbp15 dbp18 sbp18 dbp21 sbp21 dbp24 sbp24 dbp27 sbp27 dbp30 sbp30 dbp33 sbp33 dbp36 sbp36 dbp39 sbp39 dbp42 sbp42 dbp45 sbp45 dbp48 sbp48 dbp51 sbp51 dbp54 sbp54)
       1 81 127  81 111 84 142 85 131 81 148 86 123 82 128 80 122  78 119 76 117 80 118  84 119 98 136  84 127  82 118  79 128 77 121 79 126  .   .
       2 88 124  84 124 89 132 77 120 89 148 87 145 90 156 90 145  88 134 93 146 91 142  86 145 82 134  86 139  96 130   .   . 92 149  .   .  .   .
       3 87 125  79 131 85 117 86 115 77 129 85 131 82 112 79 124  86 118 84 123 77 127  78 118 78 107  86 150  78 119  85 117 79 112  .   .  .   .
       4 77 116  72 106 74 107 75 117 76 110 75 116 70 110 77 115  70 113 68 107 81 119  73 113 78 124   .   .   .   .   .   . 75 113  .   .  .   .
       5 85 116  84 127 82 117 77 109 76 116 87 128 72 116 77 115  83 114 75 117 83 122   .   . 83 125  89 121   .   .   .   .  .   .  .   .  .   .
       6 93 147 100 140 92 141 87 131 88 141 89 141 93 142 92 138  94 138 89 135 84 132  86 131 80 117  88 132  91 135  87 130 87 117  .   . 85 125
       7 84 151  70 117 81 130 91 153 80 122 78 129 85 143 72 121  83 140 74 138 81 166  86 149 78 137  66 139  83 141  87 144 82 149  .   .  .   .
       8 91 137  99 166 82 126 94 145 87 122 75 130 91 134 94 155 102 175  .   .  .   .   .   . 89 148  86 149  94 146 100 167 85 149 86 154 93 151
       9 82 119  88 137 75 122 74 128 81 133 75 119 72 121 88 130  71 120 83 144 83 144  83 129 79 104  80 138  89 129  81 126 84 117 74 116 78 129
      10 86 123  80 127 87 130 87 130 90 135 82 124  .   .  .   .  85 121 91 135 85 135  78 122 88 131  87 132  81 131  84 118 84 122 83 121 79 131
      11 69 106  71 114 62 106 63 101 49  90 56 104 64 106 77 130  72 111 73 117 60 120  62 119 65 109  70 121  64 105  63 107 71 114 71 126  .   .
      12 85 123  82 121 73 104 80 109 76 100 76 104 82 116 85 113  80 113 80 114 76 107  79 123 75 111   .   .  91 132  88 124 86 122  .   .  .   .
      13 88 137  81 118 83 123 70 112 72 108 78 114 83 112 70 125  80 116 78 115 75 117  76 112 72 117  70 117  70 107  72 108 74 112 70 109 76 118
      14 77 123  74 125 65 117 77 134 68 110 73 121 75 129 66 113  68 123 77 130 77 133  69 116 73 125  66 131  74 122  79 136 75 130  .   .  .   .
      15 80 115  82 117 91 130 87 121 87 122  .   . 94 134 97 134  91 121 85 124 84 123   .   . 97 134   .   .  83 128  94 131 99 136 77 127  .   .
      16 79 127  92 130 87 131 83 136 84 145  .   .  .   .  .   .   .   .  .   .  .   .   .   . 93 167   .   .  77 140  87 142 85 143  .   .  .   .
      17 83 128  75 139 76 132 63 106 63 109 80 132 77 135 76 136  70 124 78 130 81 136  74 141 70 142  72 110  80 158  82 141 74 131 73 144  .   .
      18 84 126  80 131 75 116 82 123 66 105 86 134 86 123 87 125  84 125 79 127 86 128  92 142 84 147  74 115  78 115  85 135 87 149 74 111 81 117
      19 82 125  67 120 72 109 82 132 73 121 95 149 80 123 87 129  90 141 81 142 89 144  75 127 75  99  94 153  97 162 108 168 86 135 96 158 87 137
      20 75 108  73 109 73 104 64 115 69  99 68 112 75 110 74 103  71 105 64 104 67 108  74 124 73 122  77 122  76 119  80 126 72 117 68 116  .   .
      21 83 150  82 153 95 167 94 156 94 172 94 145 80 145 91 147  77 140 86 161 92 151   .   . 98 165   .   .   .   .   .   . 92 153  .   .  .   .
      22 82 113  70 101 61  95 71 117 74 113 76 116 78 105 80 123  80 112 75 120 69 108  85 116 80 116  83 119  78 116  80 122 81 105 82 119  .   .
      23 86 128  74 121 82 131 85 136 90 134 89 116 87 137 87 130  84 122 83 158 88 169   .   . 99 153  96 140   .   .   .   .  .   .  .   .  .   .
      24 73 125  67 106 86 136 87 143 76 132 72 123 72 114 73 120  64 120 70 110 76 119  85 135 70 104  68 116  62 122  84 127 73 107 68 129 72 116
      25 66 108  79 121 90 152 85 127 86 138 80 124 89 143 80 128  76 119 80 130  .   .   .   .  .   .   .   .   .   .   .   .  .   .  .   .  .   .
      26 75 125  75 123 80 144 75 129 76 118 76 130 74 135 71 120  75 142  .   . 76 145  84 142 78 133  74 144  76 132  70 125 84 140 77 132  .   .
      27 73 108  71 106 74 110 85 121 78 114 77 113 64 100 67 101  86 114 67  99 57  88  61  90 67  96  73  92  58  94  70 100 63  95  .   .  .   .
      28 84 121  78 124 81 136 74 134 62 121 83 144 75 133 86 140  71 126 80 147 81 120  85 156 87 155  64 139  81 127  74 137 67 106 99 163 83 141
      29 81 116   .   .  .   .  .   .  .   . 74 119 79 119 67 102  88 139 74 113 71 114  79 116 82 132  89 137  80 122  79 120 81 128 95 140 80 124
      30 87 142  81 126 72 127 79 132 75 129 80 125 66 112 77 122  78 125 70 123 82 132  79 131 87 124  84 140  70 131  81 128 85 137 85 143 86 131
      31 96 156  88 134 81 137 82 131 87 142 82 124 80 142 81 153  79 132 85 135 80 141  87 163 86 152  93 166  82 157  84 153 89 159 83 142 88 133
      32 90 137  83 128 84 120 85 111 86 121 84 119 85 125 88 143  89 141 92 141 84 123  96 136 85 134   .   .   .   .   .   . 68 104  .   .  .   .
      33 81 157  83 150 81 134 76 148 85 161 89 142 84 157 84 155  80 154 86 135 87 157  71 126 84 150  82 155  81 148  86 150 84 141  .   .  .   .
      34 85 137  85 146 90 147 88 129 85 141 85 145 93 142 85 127  84 149 89 134 77 141   .   . 71 118  72 130  70 112  69 111 80 137 68 134 64 133
      35 85 151  75 128 78 138 73 139 73 132 72 119 67 132 76 129  63 111 70 105 75 137  65 120 80 143  77 128  78 127  80 138 79 140 72 125 79 139
      36 66 103  73 108 63  99 65 101 72 104 61  98 74 109 68 106  74 102 64  99 75 114  72 103 77 114  67 111  73 115  75 118 67 102 72 106 71 104
      37 70 129  81 127 73 135 76 128 68 128 78 142 76 122 83 140  75 127 88 144 77 143  88 151 79 129  79 127  81 142  84 126 80 147  .   .  .   .
      38 86 158  84 133 80 116 86 126 78 119 75 122 79 107 72 131  75 133 77 134 82 122  80 148 83 125  72 105  78 129  79 125 76 136 81 152  .   .
      39 77 125  80 126 76 131 83 134 89 139 93 144 85 138 88 134 100 138 92 164 95 160 102 166 99 164 104 161 104 152  84 142 86 133  .   .  .   .
      40 88 148  68 119 85 153 86 147 86 140 81 122 77 131 80 128  84 142 89 143 83 144  72 131 82 142  84 129  89 161  85 149 88 155  .   .  .   .
      end
      
      reshape long dbp sbp, i(id) j(time)
      drop if sbp == . & dbp == . 
      bysort id (time) : gen visit = _n 
      
      tsset id visit 
      
      gen OK = ((dbp + L.dbp) < 160) & ((sbp + L.sbp) < 260) 
      
      l if id < 5, sepby(id) 
      
           +------------------------------------+
           | id   time   dbp   sbp   visit   OK |
           |------------------------------------|
        1. |  1      1    81   127       1    0 |
        2. |  1      3    81   111       2    0 |
        3. |  1      6    84   142       3    0 |
        4. |  1      9    85   131       4    0 |
        5. |  1     12    81   148       5    0 |
        6. |  1     15    86   123       6    0 |
        7. |  1     18    82   128       7    0 |
        8. |  1     21    80   122       8    0 |
        9. |  1     24    78   119       9    1 |
       10. |  1     27    76   117      10    1 |
       11. |  1     30    80   118      11    1 |
       12. |  1     33    84   119      12    0 |
       13. |  1     36    98   136      13    0 |
       14. |  1     39    84   127      14    0 |
       15. |  1     42    82   118      15    0 |
       16. |  1     45    79   128      16    0 |
       17. |  1     48    77   121      17    1 |
       18. |  1     51    79   126      18    1 |
           |------------------------------------|
       19. |  2      1    88   124       1    0 |
       20. |  2      3    84   124       2    0 |
       21. |  2      6    89   132       3    0 |
       22. |  2      9    77   120       4    0 |
       23. |  2     12    89   148       5    0 |
       24. |  2     15    87   145       6    0 |
       25. |  2     18    90   156       7    0 |
       26. |  2     21    90   145       8    0 |
       27. |  2     24    88   134       9    0 |
       28. |  2     27    93   146      10    0 |
       29. |  2     30    91   142      11    0 |
       30. |  2     33    86   145      12    0 |
       31. |  2     36    82   134      13    0 |
       32. |  2     39    86   139      14    0 |
       33. |  2     42    96   130      15    0 |
       34. |  2     48    92   149      16    0 |
           |------------------------------------|
       35. |  3      1    87   125       1    0 |
       36. |  3      3    79   131       2    0 |
       37. |  3      6    85   117       3    0 |
       38. |  3      9    86   115       4    0 |
       39. |  3     12    77   129       5    0 |
       40. |  3     15    85   131       6    0 |
       41. |  3     18    82   112       7    0 |
       42. |  3     21    79   124       8    0 |
       43. |  3     24    86   118       9    0 |
       44. |  3     27    84   123      10    0 |
       45. |  3     30    77   127      11    0 |
       46. |  3     33    78   118      12    1 |
       47. |  3     36    78   107      13    1 |
       48. |  3     39    86   150      14    0 |
       49. |  3     42    78   119      15    0 |
       50. |  3     45    85   117      16    0 |
       51. |  3     48    79   112      17    0 |
           |------------------------------------|
       52. |  4      1    77   116       1    0 |
       53. |  4      3    72   106       2    1 |
       54. |  4      6    74   107       3    1 |
       55. |  4      9    75   117       4    1 |
       56. |  4     12    76   110       5    1 |
       57. |  4     15    75   116       6    1 |
       58. |  4     18    70   110       7    1 |
       59. |  4     21    77   115       8    1 |
       60. |  4     24    70   113       9    1 |
       61. |  4     27    68   107      10    1 |
       62. |  4     30    81   119      11    1 |
       63. |  4     33    73   113      12    1 |
       64. |  4     36    78   124      13    1 |
       65. |  4     48    75   113      14    1 |
           +------------------------------------+

      Comment


      • #4
        #2 and #3 are close but not identical. #2 uses | ("or") whereas #1 states "and" (implying the operator &) for combining the two averages.

        Comment


        • #5
          Thanks for catching that, Nick. I have corrected my code now.

          Comment


          • #6
            Thank you! I used Nick's code at #3, and it worked perfectly.

            Comment


            • #7
              What if I wanted to change to code from "average over the last 2 visits" to "average over the last 3 visits"?

              Comment


              • #8
                You can lag data multiple periods by adding the corresponding number to the L operator, e.g. L2. for two lags, L3. for three, and so on. See also

                Code:
                help tsvarlist

                Comment


                • #9
                  Code:
                   
                   gen OK = ((dbp + L.dbp + L2.dbp) < 240) & ((sbp + L.sbp + L2.sbp) < 390)
                  If any of the present value, the previous value, and the value before that is missing, then the indicator is returned as 0.

                  So for the first value for a person, L1 and L2 applied to both blood pressure variables returns missing and the expression becomes

                  Code:
                  ((dbp + . + .) < 240)  & ((sbp + . + . ) < 390)
                  which is false (numerically 0) as each sum is returned as missing, which is treated as arbitrarily large.

                  If you wanted indicators that were 1, 0 or missing you need the extra condition

                  i
                  Code:
                  f !missing(dbp, sbp, L.dbp, L.sbp, L2.dbp, L2.sbp)

                  Comment


                  • #10
                    Should be
                    Code:
                     if
                    and so forth.

                    Comment

                    Working...
                    X