n *.KB H number name id n { id nam nam { 8Ynam,' ' n {(^/name= (Rname)Rnam)I1 }(n$1YRname)/ok L{'name: ',nam,' not found' } n { 0 ok: n { number[n] score dstat dstat x;r;max;min;mean;var;sd;md;med;mode;v;m;n n{Rx r{(max{x[n])-min{(x{x[|Hx])[1] sd{(var{(+/(|x-nRmean{(+/x)%n)*2)%n-1)*0.5 md{(+/|x-nRmean)%n med{0.5X+/x[(Sn%2),1+Dn%2] 'sample size ';n 'maximum ';max 'minimum ';min 'range ';r 'mean ';mean 'variance ';var 'standard deviation ';sd 'mean deviation ';md 'median ';med hist r { n hist d;v;t t { Dd%n v { +/(I1+S/t)J.=t+I1 r { O- (IS/v)J.$v numc list number summary summary; i L{' ' L{' score summary' L{' ' L{ head list L { name,Bnumc,score lcr r { lcr fn ;t;n t { Lcr fn n { 1YRt r { ((n,1)R'['),0 1U(B(n,1)R((In)-I1)),((n,3)R'] '),t head r { head list r { (((1URlist), 8)R' '),((3X1YRlist)R 0 1 0)\O\ list drop drop ;idx;sid ask: L{'student class id?' } (0=sid {L)/0 idx { numberIsid head list name[idx;],B numc[idx;],score[idx;] L{'ok ?' }('y'#'L)/ask mask { (Rnumber)R1 mask[idx]{0 name {mask/[1]name numc {mask/[1]numc number{mask/number score { mask/[1]score L{'dropped' } ask stat z{stat x;r;max;min;mean;var;sd;md;med;mode;v;m;n n{Rx r{(max{x[n])-min{(x{x[|Hx])[1] sd{(var{(+/(|x-nRmean{(+/x)Pn)*2)Pn-1)*0.5 md{(+/|x-nRmean)Pn med{0.5M+/x[(SnP2),1+DnP2] z{n,r,max,min,mean,sd,med scoremax statname P 8 number range maximum minimum mean std.dev.median newstat newstat data ;i statscore { (7,1URdata)R0 i {1 next: statscore[;i]{stat data[;i] } ((1URstatscore) & i{i+1)/next statscore[1;]{+/[1]0#data statsummary statsummary ;statscore newstat score L{' ' L{' statistics summary' L{' ' L{head list L{ statname,(7 3R' '),B D statscore type , ass quiz test final scoretype newscore newscore ;pos;i;mask;listn;p;it;tp L{'current types are:' L{ type L'{'type ? ' p { type find it { L' }(V/p)/oktype L { 'type not found' }0 oktype: tp { p/IRp pos { (tp<scoretype)I1 mask {1,(Rscoretype)R1 mask[pos]{0 score { mask\score scoremax { mask\scoremax list { (1,mask)\[1]list scoretype { mask\scoretype scoretype [pos] { tp L{'scoremax?' scoremax[pos]{ L listn { (B+/,scoretype=scoretype[pos]),' ' list[pos+1;] { (1URlist)Rit,listn CJ now input new scores i{1 next: pos update number[i] }((Rnumber)&i{i+1)/next L{' new score complete' update col update idn;idx;ip idx {numberIidn L{name[idx;],(Bidn),' : ',list[1+col;],'old score ',Bscore[idx;col] }(0> ip{L)/nc score[idx;col]{ip }0 nc: L{'no change' newname newname ;nname L{ 'names?' next: } (0 = R nname{L')/done name{ name,[1] 1 8 R nname,' ' number{ number,1+ `1 Y number }next done: numc { ((Rnumber),1)Rnumber score{ score,[1] (((Rnumber)-1YRscore),1URscore)R0 'exit' alpha alpha name{ name[(H| 26 B O\ 0,name);] analysis analysis; i; mk; av1; rank tlist{ type,[1](1URtype)R'total ' means{ ((Rnumber),1+1YRtype)R0 i{1 next1: mk{ scoretype=i }done XI 0=V/,mk means[;i]{ 100X(+/mk/score) % +/mk/scoremax done: }((1YRtype) >= i{ i+1 )/next1 means[;i]{ (+/(means[;Ii-1]X((Rnumber),Rweight)Rweight)) %+/weight means{ (D 0.5+10Xmeans)%10 rank{ |V means[;i] L{ 'ranking' tlist{ ((1,1URtlist)R'rank '),[1]tlist head tlist L{ name[rank;],B(IRrank),means[rank;] '' '' '' av1{ |H [1]|V [1]means tlist{ 1 0Utlist head tlist L{ name,Bav1 weight 4 B B C B histgm title histgm data ; i;h;m50 m50 { 51 > S/data data { S data%2-m50 h {51R0 i{0 loop: h[i+1] { +/data =i }loop XI 50 & i {i+1 '' ' Histogram of ',title '' i { S/h loop2: ' *'[1+ h&i] }loop2 XI 0< i{i-1 '|----|----|----|----|----|----|----|----|----|----|' }m50/low '0 10 20 30 40 50 60 70 80 90 100' }0 low:'0 5 10 15 20 25 30 35 40 45 50' find p { list find item p { ^/list=(Rlist)R(1URlist)Y item,' ' printstat printstat colnam;data }(0=Rdata{ getcol colnam)/0 dstat data printstat0 printstat0 colnam;data }(0=Rdata{ getcol colnam)/0 data { (0#data)/data dstat data getcol data { getcol colnam;p p { 1U list find colnam }(~V/p)/snf data { ,p/score }0 snf:p { tlist find colnam }(~V/p)/nnf data {,p/means }0 nnf:'column name ',colnam,' not found' data { 0R0 printhist printhist colnam;data }(0=Rdata{ getcol colnam)/0 colnam histgm data printhist0 printhist0 colnam;data }(0=Rdata{ getcol colnam)/0 data { (0#data)/data colnam histgm data readnames readnames file ;nn;fd fd { 260 Lopen file name { 0 8 R' ' next: nn { Lrd fd } exit XI0 = R nn name { name,[1]8Ynn,' ' } next exit: fd {Lclose fd name { name[(H| 26 B O\ 0,name);] numc { ((1YRname),1)R number { I1YRname score {((Rnumber),0)R0 scoretype { 0R0 scoremax { 0R0 list { 1 8R'number ' setup setup ;i L{ 'enter the types one per line' type { 0 8 R' ' gettype: }next XI 0=Rtt { 'L type { type,[1]8Ytt,' ' }gettype next: L{ 'enter the weights for each type' i { 1 weight { 0R0 nextweight: 'L { type[i;],' = ' weight { weight,L }nextweight XI (1YRtype)&i { i+1 change nam change stype;idx;ip;idn;ic idn { id nam }(0=idn)/0 ic { list find stype }(0#V/ic)/ok L{'type not found' }0 ok:col { `1 + ic I 1 idx {numberIidn L{name[idx;],(Bidn),' : ',list[1+col;],'old score ',Bscore[idx;col] }(0> ip{L)/nc score[idx;col]{ip }0 nc: L{'no change' analstats analstats ;statscore ;tlist newstat means L {'' L {' analysis statistics' L { '' tlist { type,[1](1URtype)R'total ' head tlist statname,B D statscore