I think the problem is that you can’t stack multiple variables at once in DataFrames. There is an issue for it here. Until that’s resolved I think it’s not possible.
It also doesn’t do that automatic promotion to numbers, giving 80
, 81
, and 82
, which is a nice feature of Stata.
So yeah. best bet is probably to do two separate stack
s and then join them together. Comment on the linked issue to keep track of it, please.
julia> df = DataFrame(ID = 1:3,
sex = [0,1,0],
inc80 = [5500,2200,2000],
inc81 = [100, 200, 300],
inc82 = [500, 600, 700],
ue80 = [0,1,0],
ue81 = [1,0,0],
ue82 = [0,0,1]);
julia> df2 = select(df, :sex, r"inc*")
3×4 DataFrame
Row │ sex inc80 inc81 inc82
│ Int64 Int64 Int64 Int64
─────┼────────────────────────────
1 │ 0 5500 100 500
2 │ 1 2200 200 600
3 │ 0 2000 300 700
julia> stack(df2, r"inc*")
9×3 DataFrame
Row │ sex variable value
│ Int64 String Int64
─────┼────────────────────────
1 │ 0 inc80 5500
2 │ 1 inc80 2200
3 │ 0 inc80 2000
4 │ 0 inc81 100
5 │ 1 inc81 200
6 │ 0 inc81 300
7 │ 0 inc82 500
8 │ 1 inc82 600
9 │ 0 inc82 700