Dear Statalisters,

I would like to write a program that automatically plots the means of variables over time for different groups of variables.
Taking a toy data example, let - x_1, x_2 - and - x_3, x_4, x_5 - form variable groups, respectively.

Below is a simplified version of my current program. It works fine if I specify exactly four variables but any number of variables below that makes Stata throw the error "too few variables specified". When specifying any number of variables greater than four, the program stops after plotting the first four variables. So far, I have tried "capture noisily" (see below) but without success.

Any help (also of course on how to write a neater program in general) is appreciated. Thank you very much.

Code:
// Toy data
    clear
    set seed 8881

    set obs 80
    egen year = seq(), from(2016) to (2019) block(1)
    forvalues i = 1/5 {
        gen x_`i'          = 1 + `i' + runiformint(1, 5) if year == 2016
        replace x_`i'    = 2 + `i' + runiformint(1, 5) if year == 2017
        replace x_`i'    = 3 + `i' + runiformint(1, 5) if year == 2018
        replace x_`i'    = 4 + `i' + runiformint(1, 5) if year == 2019
        
        label variable x_`i' "Label for variable `i'"
    }

// Program
    cap program drop plotmean
    program define plotmean
    syntax varlist
  
        local count: word count `varlist'
        forvalues i = 1/`count' {
            local x_`i': word `i' of `varlist'
          
            local lab_`i': var label `x_`i''
            
            tempvar x_`i'_mean
            egen `x_`i'_mean' = mean(`x_`i''), by(year)
        }
      
        capture noisily {
        twoway     ///
                 connected `x_1_mean' year, sort ///
            ||    connected `x_2_mean' year, sort ///
            ||    connected `x_3_mean' year, sort ///
            ||    connected `x_4_mean' year, sort ///
            legend(order(1 "`lab_1'" 2 "`lab_2'"       ///
                                 3 "`lab_3'" 4 "`lab_4'" ))
        }
        
    end