*! 9aug2013 * @@ Written by Elliott Lowy, mostly on the US government's dime (17 US Code ยง 105). program chlist version 11 mata:DoIt() end version 11 mata: void DoIt() { //>>define function<< class tabel scalar t class dataset scalar ds syntaxl(st_local("0"),&(vlist="anything"),(&(clist="c:hars="),&(dta="d:ta"),&(swap="s:wap"),&(out="out="))) vlist="_dta"*(vlist==""|dta),varlist(vlist,"all nfrep") if (!length(vlist)) { printf("{txt:No variables found}\n") return } ds.with("chars") ds.readmem() clist=varlistk(uniqrows(ds.chars[,2]),clist,"all nfrep") if (!length(clist)) { printf("{txt:No chars found}\n") return } in=vmap(ds.chars[,1],vlist):&vmap(ds.chars[,2],clist) chtab=select(ds.chars,in) if (!length(chtab)) { printf("{txt:No matching vars/chars found}\n") return } stub=vlist' //stub=dedup(chtab[,1],1) head=dedup(chtab[,2],1) del=charsubs(chtab,1) rmap=vmap(concat(pairs(stub,head),del),concat(chtab[,1..2],del,"r")) data=J(rows(rmap),1,"") data[toindices(rmap)]=chtab[select(rmap,rmap),3] data=rowshape(data,rows(stub)) t.body="",head'\stub,data t.head=1 t.stub=1 if (swap) t.body=t.body' t.present(out) } end