Announcement

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

  • Creating a local loop for multiple twoway graphs

    Dear Statalist:

    I'd like to make a loop for the following lines of code, which works perfectly well, but I'd like to shorten the commands. Here are the commands I used to make multiple bar graphs, where "agy" is the variable for agency and "number announcement_open_ym" is the year/month identifier for when a job posting opened.

    Code:
    graph twoway bar number announcement_open_ym if agy=="DJ", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("DJ") name(DJ)
    graph twoway bar number announcement_open_ym if agy=="SZ", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("SZ") name(SZ)
    graph twoway bar number announcement_open_ym if agy=="HE", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("HE") name(HE)
    graph twoway bar number announcement_open_ym if agy=="DL", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("DL") name(DL)
    graph twoway bar number announcement_open_ym if agy=="NN", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("NN") name(NN)
    graph twoway bar number announcement_open_ym if agy=="HU", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("HU") name(HU)
    graph twoway bar number announcement_open_ym if agy=="GS", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("GS") name(GS)
    graph twoway bar number announcement_open_ym if agy=="CM", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("CM") name(CM)
    graph twoway bar number announcement_open_ym if agy=="DN", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("DN") name(DN)
    graph combine DJ SZ HE DL NN HU GS CM DN, ycommon
    My data looks like this.
    Code:
    * Example generated by -dataex-. To install: ssc install dataex
    clear
    input str2 agy float(announcement_open_ym announcement_close_ym)
    "TR" 698 710
    "TR" 704 713
    "TR" 704 705
    "TR" 698 709
    "TR" 698 709
    "TR" 704 705
    "TR" 698 709
    "TR" 704 705
    "TR" 698 710
    "TR" 702 712
    "TR" 698 710
    "TR" 702 719
    "TR" 704 705
    "TR" 698 710
    "TR" 704 705
    "TR" 698 710
    "TR" 702 712
    "TR" 702 712
    "TR" 704 705
    "TR" 702 712
    "TR" 703 715
    "TR" 704 705
    "TR" 703 713
    "TR" 704 705
    "TR" 698 710
    "TR" 698 710
    "TR" 703 715
    "TR" 698 707
    "TR" 698 710
    "TR" 698 709
    "TR" 698 710
    "TR" 703 713
    "TR" 703 713
    "TR" 700 712
    "TR" 698 710
    "TR" 701 711
    "TR" 703 713
    "TR" 704 705
    "TR" 702 712
    "TR" 702 713
    "TR" 701 713
    "TR" 702 712
    "TR" 698 710
    "TR" 702 712
    "TR" 698 710
    "TR" 704 705
    "TR" 698 709
    "TR" 702 712
    "TR" 698 709
    "TR" 704 705
    "TR" 704 705
    "TR" 698 709
    "TR" 698 710
    "TR" 703 715
    "TR" 703 705
    "TR" 697 707
    "TR" 703 713
    "TR" 698 709
    "TR" 698 710
    "TR" 702 711
    "TR" 698 709
    "TR" 698 705
    "TR" 703 713
    "TR" 701 712
    "TR" 698 710
    "TR" 703 715
    "TR" 698 710
    "TR" 704 714
    "TR" 698 710
    "TR" 698 710
    "TR" 698 710
    "TR" 702 712
    "TR" 704 705
    "TR" 704 705
    "TR" 704 705
    "TR" 698 710
    "DN" 704 705
    "TR" 698 709
    "TR" 704 705
    "TR" 698 710
    "TR" 703 713
    "TR" 702 714
    "TR" 698 710
    "TR" 703 713
    "TR" 698 709
    "TR" 704 705
    "TR" 703 715
    "TR" 698 710
    "TR" 698 709
    "TR" 703 713
    "TR" 698 710
    "TR" 701 711
    "TR" 698 710
    "TR" 698 710
    "TR" 698 710
    "TR" 696 708
    "DN" 704 705
    "DN" 704 705
    "DN" 704 705
    "TR" 698 710
    end
    format %tm announcement_open_ym
    format %tm announcement_close_ym
    Thanks.

  • #2
    Code:
    local list DJ SZ HE DL NN HU GS CM DN
    
    foreach i of local list{
        twoway bar number announcement_open_ym if agy=="`i'", ytitle("") xtitle("Year/Month") lwidth(0) barwidth(0.7) tlabel(2018m9(1)2021m12) xlabel(, angle(90)) xlabel(, labsize(tiny)) ylabel(, angle(0)) title("`i'") name(`i')
    }
    
    graph combine `list', ycommon
    Note: your data example doesn't contain all of the variables used to produce the graphs, so the above code is untested. Beware of typos.

    Comment


    • #3
      Thank so much, Ali.

      Comment


      • #4
        Why not use a by() option?

        Comment


        • #5
          Thanks, Nick. Can you please elaborate?

          Comment


          • #6
            I can't test this given the limitations of your data example, but I had in mind something like


            Code:
            local list DJ SZ HE DL NN HU GS CM DN
            tokenize "`list'"
            local J : word count "`list'"
            
            forval j = 1/`J' {
                label def which `j' "``j''", add
            }
            
            encode agy, label(which) gen(which)
            
            twoway bar number announcement_open_ym, by(which) ytitle("") xtitle("")  lwidth(0) barwidth(0.7) tlabel(2018m9(3)2021m12)  ylabel(, angle(0))

            EDIT: The qualifier

            Code:
            if which <= `J'
            might be needed
            Last edited by Nick Cox; 13 Jul 2022, 01:39.

            Comment

            Working...
            X