Announcement

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

  • How to make a hbar which shows percentage of sum of one variable over groups

    I have a dataset like this (part of it):

    Code:
    * Example generated by -dataex-. To install: ssc install dataex
    clear
    input byte point float(group joiners)
    1 12 11
    1 12  7
    1 12  6
    2 12  6
    1 12  7
    1 12  5
    2 12  7
    1 12  7
    1 12  7
    1 12  7
    1 12  7
    1 12  4
    1 12  6
    1 12  6
    1 12  6
    1 12  6
    1 12  2
    1 12  1
    end
    label values group rank
    label values joiners rank
    label def rank 12 "Old", modify
    label def rank 1 "Newbie", modify
    label def rank 2 "Jr.", modify
    label def rank 4 "Full", modify
    label def rank 5 "Sr.", modify
    label def rank 6 "Hero", modify
    label def rank 7 "Outstanding", modify
    label def rank 11 "Expert", modify
    Then, I used these codes to create the variable pjoiners, that is the percent of sum points of each type of joiners per total points of all joiners.
    Code:
    collapse (sum) point, by(group joiners)
    
    by group, sort: egen tpoint_group = total(point)
    by joiners group, sort: egen tpoint_joiners = total(point)
    bysort joiners group: gen pjoiners = round(tpoint_joiners/tpoint_group*100,.1)
    bysort group: list group joiners point tpoint_group tpoint_joiners pjoiners, abb(30)
    Results I got are:
    Code:
         +------------------------------------------------------------------------+
         | group       joiners   point   tpoint_group   tpoint_joiners   pjoiners |
         |------------------------------------------------------------------------|
      1. |   Old        Newbie       1             20                1          5 |
      2. |   Old           Jr.       1             20                1          5 |
      3. |   Old          Full       1             20                1          5 |
      4. |   Old           Sr.       1             20                1          5 |
      5. |   Old          Hero       7             20                7         35 |
         |------------------------------------------------------------------------|
      6. |   Old   Outstanding       8             20                8         40 |
      7. |   Old        Expert       1             20                1          5 |
         +------------------------------------------------------------------------+
    I don't know how to make a hbar that shows percent with the values of the pjoiners

    I tried to use the code
    Code:
    gr hbar (percent) point, over(joiners) plotregion(style(none)) ///
        graphregion(color(white)) bar(1, bfcolor(green*0.2)) blabel(total, format(%2.1f))
    Unfortunately, the values shown on the graph are incorrect. I meant the values on the graph for joiners with 1 point is 5.6 (but it should be 5.0)

    Thank you for you help.
    Last edited by Thong Nguyen; 05 Jan 2020, 01:29.

  • #2
    I figured out the the value of 5.6 is the percent of total frequency of each joiners per total frequency of all observations. (1/18 = 5.6%). But still don't know what I should do to get percentages for sum of points for each group of joiners per total points of all joiners (in the group "Old", in particular).

    Thank you for you help.

    Comment


    • #3
      I can't follow what you want easily. Can you give the results of

      Code:
       
       collapse (sum) point, by(group joiners)
      as a data example? The data example in #1 doesn't seem suitable as a starting point, as the value of group is constant.

      Comment


      • #4
        Originally posted by Nick Cox View Post
        I can't follow what you want easily. Can you give the results of

        Code:
        collapse (sum) point, by(group joiners)
        as a data example? The data example in #1 doesn't seem suitable as a starting point, as the value of group is constant.
        I am thankful for your quick reply.

        I shown results after collapse and egen in OP.

        The group has a constant value because I dropped my dataset to that group only. In reality, my full dataset have 13 values for the variable group.

        Before I collapse data, it looks like that
        Code:
        . list
        
             +-----------------------------+
             | point   group       joiners |
             |-----------------------------|
          1. |     1     Old        Expert |
          2. |     1     Old   Outstanding |
          3. |     1     Old          Hero |
          4. |     2     Old          Hero |
          5. |     1     Old   Outstanding |
             |-----------------------------|
          6. |     1     Old           Sr. |
          7. |     2     Old   Outstanding |
          8. |     1     Old   Outstanding |
          9. |     1     Old   Outstanding |
         10. |     1     Old   Outstanding |
             |-----------------------------|
         11. |     1     Old   Outstanding |
         12. |     1     Old          Full |
         13. |     1     Old          Hero |
         14. |     1     Old          Hero |
         15. |     1     Old          Hero |
             |-----------------------------|
         16. |     1     Old          Hero |
         17. |     1     Old           Jr. |
         18. |     1     Old        Newbie |
             +-----------------------------+
        After collapse
        Code:
        * Example generated by -dataex-. To install: ssc install dataex
        clear
        input float(group joiners) double point
        12  1 1
        12  2 1
        12  4 1
        12  5 1
        12  6 7
        12  7 8
        12 11 1
        end
        label values group rank
        label values joiners rank
        label def rank 12 "Old", modify
        label def rank 1 "Newbie", modify
        label def rank 2 "Jr.", modify
        label def rank 4 "Full", modify
        label def rank 5 "Sr.", modify
        label def rank 6 "Hero", modify
        label def rank 7 "Outstanding", modify
        label def rank 11 "Expert", modify
        Code:
        . list
        
             +-----------------------------+
             | group       joiners   point |
             |-----------------------------|
          1. |   Old        Newbie       1 |
          2. |   Old           Jr.       1 |
          3. |   Old          Full       1 |
          4. |   Old           Sr.       1 |
          5. |   Old          Hero       7 |
             |-----------------------------|
          6. |   Old   Outstanding       8 |
          7. |   Old        Expert       1 |
             +-----------------------------+
        Last edited by Thong Nguyen; 05 Jan 2020, 04:41.

        Comment


        • #5
          I meant I want to get the percent of total points the specific group "Old" sent their gifts to each group of joiners.

          For example the group "Old" gave away total 20 gifts.
          Then the percent of gifts they sent to Newbie will be 1/20 = 5%.
          Respectively, the percent of gifts they sent to Outstanding guys will be 8/20 = 40%.

          Ok, to make it more easily. I updated the new dataset with two values for the variable group
          Code:
          * Example generated by -dataex-. To install: ssc install dataex
          clear
          input byte point float(group joiners)
           1 11 13
          50 11 13
           2 11 13
           1 11 13
          10 11 13
          50 11 13
           1 11  7
           1 11  7
           1 11  7
           2 11  7
           1 11  7
           1 11  4
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
          23 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
          10 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11 10
           1 11  4
          10 11  4
           1 11  7
           1 11  7
           1 11  1
           2 11  7
           2 11 11
           2 11 11
           1 11  7
           1 11  7
           5 11  3
           1 11  3
           2 11 12
          10 11  7
           1 11  7
           1 11 12
          10 11 12
           1 11 12
          10 11 12
           1 11 12
           1 11  3
          10 11  7
           1 11  6
           1 11  7
           1 11  7
           1 11  7
           1 11  7
           1 11  5
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           1 11 11
           2 11 11
           1 11  7
           1 11  4
           1 11  7
          end
          label values group rank
          label values joiners rank
          label def rank 11 "Expert", modify
          label def rank 1 "Newbie", modify
          label def rank 3 "Member", modify
          label def rank 4 "Full", modify
          label def rank 5 "Sr.", modify
          label def rank 6 "Hero", modify
          label def rank 7 "Outstanding", modify
          label def rank 10 "Administrator", modify
          label def rank 12 "Old", modify
          label def rank 13 "Founder", modify
          . collapse (sum) point, by(group joiners)
          Code:
          * Example generated by -dataex-. To install: ssc install dataex
          clear
          input float(group joiners) double point
          11  0   15
          11  1  404
          11  2  468
          11  3  808
          11  4  839
          11  5 1492
          11  6 2831
          11  7 2289
          11  8   85
          11  9    6
          11 10   77
          11 11   76
          11 12   50
          11 13  114
          12  1    1
          12  2    1
          12  4    1
          12  5    1
          12  6    7
          12  7    8
          12 11    1
          end
          label values group rank
          label values joiners rank
          label def rank 11 "Expert", modify
          label def rank 12 "Old", modify
          label def rank 0 "Brand New", modify
          label def rank 1 "Newbie", modify
          label def rank 2 "Jr.", modify
          label def rank 3 "Member", modify
          label def rank 4 "Full", modify
          label def rank 5 "Sr.", modify
          label def rank 6 "Hero", modify
          label def rank 7 "Outstanding", modify
          label def rank 8 "Staff", modify
          label def rank 9 "Global Moderator", modify
          label def rank 10 "Administrator", modify
          label def rank 13 "Founder", modify
          Code:
          . list
          
               +-----------------------------------+
               |  group            joiners   point |
               |-----------------------------------|
            1. | Expert          Brand New      15 |
            2. | Expert             Newbie     404 |
            3. | Expert                Jr.     468 |
            4. | Expert             Member     808 |
            5. | Expert               Full     839 |
               |-----------------------------------|
            6. | Expert                Sr.    1492 |
            7. | Expert               Hero    2831 |
            8. | Expert        Outstanding    2289 |
            9. | Expert              Staff      85 |
           10. | Expert   Global Moderator       6 |
               |-----------------------------------|
           11. | Expert      Administrator      77 |
           12. | Expert             Expert      76 |
           13. | Expert                Old      50 |
           14. | Expert            Founder     114 |
           15. |    Old             Newbie       1 |
               |-----------------------------------|
           16. |    Old                Jr.       1 |
           17. |    Old               Full       1 |
           18. |    Old                Sr.       1 |
           19. |    Old               Hero       7 |
           20. |    Old        Outstanding       8 |
               |-----------------------------------|
           21. |    Old             Expert       1 |
               +-----------------------------------+
          Results:
          bysort group: list group joiners point tpoint_group tpoint_joiners pjoiners, abb(30)
          Code:
          -> group = Expert
          
               +------------------------------------------------------------------------------+
               |  group            joiners   point   tpoint_group   tpoint_joiners   pjoiners |
               |------------------------------------------------------------------------------|
            1. | Expert             Expert      76           9554               76         .8 |
            2. | Expert                Jr.     468           9554              468        4.9 |
            3. | Expert                Sr.    1492           9554             1492       15.6 |
            4. | Expert              Staff      85           9554               85         .9 |
            5. | Expert      Administrator      77           9554               77         .8 |
               |------------------------------------------------------------------------------|
            6. | Expert               Full     839           9554              839        8.8 |
            7. | Expert             Newbie     404           9554              404        4.2 |
            8. | Expert             Member     808           9554              808        8.5 |
            9. | Expert            Founder     114           9554              114        1.2 |
           10. | Expert               Hero    2831           9554             2831       29.6 |
               |------------------------------------------------------------------------------|
           11. | Expert        Outstanding    2289           9554             2289         24 |
           12. | Expert   Global Moderator       6           9554                6         .1 |
           13. | Expert          Brand New      15           9554               15         .2 |
           14. | Expert                Old      50           9554               50         .5 |
               +------------------------------------------------------------------------------+
          
          --------------------------------------------------------------------------------------------------------------------------------------
          -> group = Old
          
               +------------------------------------------------------------------------+
               | group       joiners   point   tpoint_group   tpoint_joiners   pjoiners |
               |------------------------------------------------------------------------|
            1. |   Old           Sr.       1             20                1          5 |
            2. |   Old        Newbie       1             20                1          5 |
            3. |   Old          Full       1             20                1          5 |
            4. |   Old           Jr.       1             20                1          5 |
            5. |   Old        Expert       1             20                1          5 |
               |------------------------------------------------------------------------|
            6. |   Old          Hero       7             20                7         35 |
            7. |   Old   Outstanding       8             20                8         40 |
               +------------------------------------------------------------------------+
          I don't know how to make a hbar chart and display the values of pjoiners on the chart.


          Thank you so much, Nick.
          Last edited by Thong Nguyen; 05 Jan 2020, 04:51.

          Comment


          • #6
            Thanks for the extra details. I am away from computers for some hours. As always the thread remains open to anybody else.

            Comment


            • #7
              I used tabplot from SSC as documented at https://www.statalist.org/forums/for...updated-on-ssc (#9 there is still the latest news).

              Here is the complete code:

              Code:
              * Example generated by -dataex-. To install: ssc install dataex
              clear
              input float(group joiners) double point
              11  0   15
              11  1  404
              11  2  468
              11  3  808
              11  4  839
              11  5 1492
              11  6 2831
              11  7 2289
              11  8   85
              11  9    6
              11 10   77
              11 11   76
              11 12   50
              11 13  114
              12  1    1
              12  2    1
              12  4    1
              12  5    1
              12  6    7
              12  7    8
              12 11    1
              end
              label values group rank
              label values joiners rank
              label def rank 11 "Expert", modify
              label def rank 12 "Old", modify
              label def rank 0 "Brand New", modify
              label def rank 1 "Newbie", modify
              label def rank 2 "Jr.", modify
              label def rank 3 "Member", modify
              label def rank 4 "Full", modify
              label def rank 5 "Sr.", modify
              label def rank 6 "Hero", modify
              label def rank 7 "Outstanding", modify
              label def rank 8 "Staff", modify
              label def rank 9 "Global Moderator", modify
              label def rank 10 "Administrator", modify
              label def rank 13 "Founder", modify
              
              tabplot joiners group [fw=point], percent(group) scheme(s1color) showval(offset(0.4)) horiz ///
              xtitle("") ytitle("") bfcolor(green*0.2) subtitle(% points given)
              Click image for larger version

Name:	points_given.png
Views:	1
Size:	40.5 KB
ID:	1530891


              You can get the same numbers shown with

              Code:
              graph hbar (percent) [fw=point], over(joiners) by(group, note("")) blabel(bar, format(%2.1f)) scheme(s1color) ysc(range(0, 45)) yla(0(10)40)
              but I like the design above more.
              Last edited by Nick Cox; 06 Jan 2020, 03:43.

              Comment


              • #8
                Thank you so much, Nick. I learned a lot from the tabplot command and your code above.

                Comment

                Working...
                X