AT_BANNER([RANK]) AT_SETUP([RANK simple case with defaults]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /x (f8). BEGIN DATA. -1 0 1 2 2 4 5 END DATA. RANK x. LIST. ]) AT_CHECK([pspp -o pspp.csv rank.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Variables Created By RANK x into Rx(RANK of x) Table: Data List x,Rx -1,1.000 0,2.000 1,3.000 2,4.500 2,4.500 4,6.000 5,7.000 ]) AT_CLEANUP AT_SETUP([RANK with RANK, RFRACTION, N]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /a * b *. BEGIN DATA. 0 24 1 32 2 31 2 32 4 30 5 29 6 1 7 43 8 . 9 45 END DATA. RANK a b (D) /PRINT=YES /RANK /TIES=HIGH /RFRACTION /N INTO count . DISPLAY DICTIONARY. LIST. ]) AT_CHECK([pspp -o pspp.csv rank.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Variables Created By RANK a into Ra(RANK of a) b into Rb(RANK of b) a into RFR001(RFRACTION of a) b into RFR002(RFRACTION of b) a into count(N of a) b into Nb(N of b) Variable,Description,,Position a,Format: F8.2,,1 ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, b,Format: F8.2,,2 ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, Ra,RANK of a,,3 ,Format: F9.3,, ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, RFR001,RFRACTION of a,,4 ,Format: F6.4,, ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, count,N of a,,5 ,Format: F6.0,, ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, Rb,RANK of b,,6 ,Format: F9.3,, ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, RFR002,RFRACTION of b,,7 ,Format: F6.4,, ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, Nb,N of b,,8 ,Format: F6.0,, ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, Table: Data List a,b,Ra,RFR001,count,Rb,RFR002,Nb .00,24.00,10.000,1.0000,10,8.000,.8889,9 1.00,32.00,9.000,.9000,10,4.000,.4444,9 2.00,31.00,8.000,.8000,10,5.000,.5556,9 2.00,32.00,8.000,.8000,10,4.000,.4444,9 4.00,30.00,6.000,.6000,10,6.000,.6667,9 5.00,29.00,5.000,.5000,10,7.000,.7778,9 6.00,1.00,4.000,.4000,10,9.000,1.0000,9 7.00,43.00,3.000,.3000,10,2.000,.2222,9 8.00,. ,2.000,.2000,10,. ,. ,. 9.00,45.00,1.000,.1000,10,1.000,.1111,9 ]) AT_CLEANUP AT_SETUP([RANK with SAVAGE, PERCENT, PROPORTION, NTILES]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /a * b *. BEGIN DATA. 0 24 1 32 2 31 2 32 4 30 5 29 6 1 7 43 8 8 9 45 END DATA. RANK a /PRINT=YES /TIES=CONDENSE /SAVAGE /PERCENT /PROPORTION /NTILES(4) /NORMAL . LIST. ]) AT_CHECK([pspp -o pspp.csv rank.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Variables Created By RANK a into Sa(SAVAGE of a) a into Pa(PERCENT of a) a into PRO001(PROPORTION of a using BLOM) a into Na(NTILES of a) a into NOR001(NORMAL of a using BLOM) Table: Data List a,b,Sa,Pa,PRO001,Na,NOR001 .00,24.00,-.9000,10.00,.0610,1,-1.547 1.00,32.00,-.7889,20.00,.1585,1,-1.000 2.00,31.00,-.5925,30.00,.2561,2,-.6554 2.00,32.00,-.5925,30.00,.2561,2,-.6554 4.00,30.00,-.3544,40.00,.3537,2,-.3755 5.00,29.00,-.1544,50.00,.4512,2,-.1226 6.00,1.00,.0956,60.00,.5488,3,.1226 7.00,43.00,.4290,70.00,.6463,3,.3755 8.00,8.00,.9290,80.00,.7439,3,.6554 9.00,45.00,1.9290,90.00,.8415,4,1.0005 ]) AT_CLEANUP AT_SETUP([RANK with SPLIT FILE]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /a * g1 g2 *. BEGIN DATA. 2 1 2 2 1 2 3 1 2 4 1 2 5 1 2 1 0 2 2 0 2 3 0 2 4 0 2 5 0 2 6 0 2 7 0 2 8 0 2 6 1 2 7 1 2 7 1 2 8 1 2 9 1 1 END DATA. RANK a (D) BY g2 g1 /PRINT=YES /TIES=LOW /MISSING=INCLUDE /FRACTION=RANKIT /RANK /NORMAL . SPLIT FILE BY g1. RANK a (D) BY g2 /PRINT=YES /TIES=LOW /MISSING=INCLUDE /FRACTION=RANKIT /RANK /NORMAL . SPLIT FILE OFF. LIST. ]) AT_CHECK([pspp -o pspp.csv rank.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Variables Created By RANK a into Ra(RANK of a BY g2 g1) a into Na(NORMAL of a using RANKIT BY g2 g1) Variables Created By RANK a into RAN001(RANK of a BY g2) a into NOR001(NORMAL of a using RANKIT BY g2) Table: Data List a,g1,g2,Ra,Na,RAN001,NOR001 2.00,1.00,2.00,8.000,.9674,4.000,.5244 2.00,1.00,2.00,8.000,.9674,4.000,.5244 3.00,1.00,2.00,7.000,.5895,3.000,.0000 4.00,1.00,2.00,6.000,.2822,2.000,-.5244 5.00,1.00,2.00,5.000,.0000,1.000,-1.282 1.00,.00,2.00,8.000,1.5341,8.000,1.5341 2.00,.00,2.00,7.000,.8871,7.000,.8871 3.00,.00,2.00,6.000,.4888,6.000,.4888 4.00,.00,2.00,5.000,.1573,5.000,.1573 5.00,.00,2.00,4.000,-.1573,4.000,-.1573 6.00,.00,2.00,3.000,-.4888,3.000,-.4888 7.00,.00,2.00,2.000,-.8871,2.000,-.8871 8.00,.00,2.00,1.000,-1.534,1.000,-1.534 6.00,1.00,2.00,4.000,-.2822,4.000,1.1503 7.00,1.00,2.00,2.000,-.9674,2.000,-.3186 7.00,1.00,2.00,2.000,-.9674,2.000,-.3186 8.00,1.00,2.00,1.000,-1.593,1.000,-1.150 9.00,1.00,1.00,1.000,.0000,1.000,.0000 ]) AT_CLEANUP # Also tests small ranks for special case of SAVAGE ranks. AT_SETUP([RANK with fractional ranks]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /a * w * . BEGIN DATA. 1 1.5 2 0.2 3 0.1 4 1 5 1 6 1 7 1 8 1 END DATA. WEIGHT BY w. RANK a /FRACTION=TUKEY /PROPORTION /SAVAGE . LIST. ]) AT_CHECK([pspp -o pspp.csv rank.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Variables Created By RANK a into Pa(PROPORTION of a using TUKEY) a into Sa(SAVAGE of a) Table: Data List a,w,Pa,Sa 1.00,1.50,.1285,-.8016 2.00,.20,.1776,-.6905 3.00,.10,.1986,-.6905 4.00,1.00,.3458,-.5305 5.00,1.00,.4860,-.2905 6.00,1.00,.6262,.0262 7.00,1.00,.7664,.4929 8.00,1.00,.9065,1.3929 ]) AT_CLEANUP AT_SETUP([RANK all-ties due to tiny weights]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /x * w *. BEGIN DATA. 1 0.1 2 0.1 3 0.1 4 0.2 5 0.1 6 0.1 7 0.1 8 0.1 END DATA. WEIGHT BY w. RANK x /TIES=low /RANK into xl. RANK x /TIES=high /RANK into xh. RANK x /TIES=condense /RANK into xc. * Test VW fraction RANK x /FRACTION=VW /NORMAL. LIST. ]) AT_CHECK([pspp -o pspp.csv rank.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Variables Created By RANK x into xl(RANK of x) Variables Created By RANK x into xh(RANK of x) Variables Created By RANK x into xc(RANK of x) Variables Created By RANK x into Nx(NORMAL of x using VW) Table: Data List x,w,xl,xh,xc,Nx 1.00,.10,.000,.100,1.000,-1.938 2.00,.10,.100,.200,2.000,-1.412 3.00,.10,.200,.300,3.000,-1.119 4.00,.20,.300,.500,4.000,-.8046 5.00,.10,.500,.600,5.000,-.5549 6.00,.10,.600,.700,6.000,-.4067 7.00,.10,.700,.800,7.000,-.2670 8.00,.10,.800,.900,8.000,-.1323 ]) AT_CLEANUP AT_SETUP([RANK variable name fallback]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /foo * rfoo * ran003 *. BEGIN DATA. 0 3 2 1 3 2 2 3 2 2 3 2 4 3 2 5 3 2 6 3 2 7 3 2 8 3 2 9 3 2 END DATA. RANK foo. DISPLAY DICTIONARY. ]) AT_CHECK([pspp -o pspp.csv rank.sps]) AT_CHECK([cat pspp.csv], [0], [dnl Variables Created By RANK foo into RAN001(RANK of foo) Variable,Description,,Position foo,Format: F8.2,,1 ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, rfoo,Format: F8.2,,2 ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, ran003,Format: F8.2,,3 ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, RAN001,RANK of foo,,4 ,Format: F9.3,, ,Measure: Scale,, ,Display Alignment: Right,, ,Display Width: 8,, ]) AT_CLEANUP AT_SETUP([RANK robust variable name creation]) AT_DATA([rank.sps], [dnl DATA LIST LIST notable /x * rx * ran001 TO ran999. BEGIN DATA. 1 2 3 4 5 6 7 END DATA. RANK x. DELETE VAR ran001 TO ran999. LIST. ]) AT_CHECK([pspp -O format=csv rank.sps], [0], [dnl "rank.sps:3: warning: Missing value(s) for all variables from rx onward. These will be filled with the system-missing value or blanks, as appropriate." "rank.sps:4: warning: Missing value(s) for all variables from rx onward. These will be filled with the system-missing value or blanks, as appropriate." "rank.sps:5: warning: Missing value(s) for all variables from rx onward. These will be filled with the system-missing value or blanks, as appropriate." "rank.sps:6: warning: Missing value(s) for all variables from rx onward. These will be filled with the system-missing value or blanks, as appropriate." "rank.sps:7: warning: Missing value(s) for all variables from rx onward. These will be filled with the system-missing value or blanks, as appropriate." "rank.sps:8: warning: Missing value(s) for all variables from rx onward. These will be filled with the system-missing value or blanks, as appropriate." "rank.sps:9: warning: Missing value(s) for all variables from rx onward. These will be filled with the system-missing value or blanks, as appropriate." Variables Created By RANK x into RNKRA01(RANK of x) Table: Data List x,rx,RNKRA01 1.00,. ,1.000 2.00,. ,2.000 3.00,. ,3.000 4.00,. ,4.000 5.00,. ,5.000 6.00,. ,6.000 7.00,. ,7.000 ]) AT_CLEANUP dnl Test for proper behaviour in the face of invalid input. AT_SETUP([RANK handling of invalid input]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /x * a (a2). BEGIN DATA. -1 s 0 s 1 s 2 s 2 s 4 s 5 s END DATA. DEBUG XFORM FAIL. RANK x. ]) AT_CHECK([pspp -O format=csv --testing-mode rank.sps], [1], [dnl Variables Created By RANK x into Rx(RANK of x) rank.sps:14: error: RANK: DEBUG XFORM FAIL transformation executed ]) AT_CLEANUP AT_SETUP([RANK handling of invalid syntax]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /x * a (a2). BEGIN DATA. -1 s 0 s 1 s 2 s 2 s 4 s 5 s END DATA. * invalid NTILES (no parameter) RANK x /NTILES . * invalid NTILES (not an integer) RANK x /NTILES(d) . * destination variable already exists RANK x /RANK INTO x. * Too many variables in INTO RANK x /RANK INTO foo bar wiz. ]) AT_CHECK([pspp -O format=csv rank.sps], [1], [dnl rank.sps:15.1: error: RANK: Syntax error at end of command: expecting `@{:@'. rank.sps:19.11: error: RANK: Syntax error at `d': expecting integer. rank.sps:25: error: RANK: Variable x already exists. rank.sps:30: error: RANK: Too many variables in INTO clause. ]) AT_CLEANUP