Automatically infer variables' measurement level from format and data.
[pspp] / tests / language / stats / autorecode.at
index 0b688adbb04dad1c73f44c229fffd0e344219fba..f639b078a493dfc2f895e2ee155c7c5ef582b17e 100644 (file)
@@ -1,16 +1,16 @@
 dnl PSPP - a program for statistical analysis.
 dnl Copyright (C) 2017 Free Software Foundation, Inc.
-dnl 
+dnl
 dnl This program is free software: you can redistribute it and/or modify
 dnl it under the terms of the GNU General Public License as published by
 dnl the Free Software Foundation, either version 3 of the License, or
 dnl (at your option) any later version.
-dnl 
+dnl
 dnl This program is distributed in the hope that it will be useful,
 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 dnl GNU General Public License for more details.
-dnl 
+dnl
 dnl You should have received a copy of the GNU General Public License
 dnl along with this program.  If not, see <http://www.gnu.org/licenses/>.
 dnl
@@ -35,28 +35,82 @@ MISSING VALUES u (11)
               y (11 THRU 15)
               z (11 THRU 16).
 
-AUTORECODE u v w x y z INTO a b c d e f.
+AUTORECODE u v w x y z INTO a b c d e f/print.
 LIST.
 DISPLAY VARIABLES/VARIABLES=a TO f.
 ])
 AT_CHECK([pspp -O format=csv autorecode.sps], [0], [dnl
+Table: Recoding u into a.
+Old Value,New Value,Value Label
+12,1,12
+13,2,13
+14,3,14
+15,4,15
+16,5,16
+11,6,11
+
+Table: Recoding v into b.
+Old Value,New Value,Value Label
+13,1,13
+14,2,14
+15,3,15
+16,4,16
+11,5,11
+12,6,12
+
+Table: Recoding w into c.
+Old Value,New Value,Value Label
+14,1,14
+15,2,15
+16,3,16
+11,4,11
+12,5,12
+13,6,13
+
+Table: Recoding x into d.
+Old Value,New Value,Value Label
+15,1,15
+16,2,16
+11,3,11
+12,4,12
+13,5,13
+14,6,14
+
+Table: Recoding y into e.
+Old Value,New Value,Value Label
+16,1,16
+11,2,11
+12,3,12
+13,4,13
+14,5,14
+15,6,15
+
+Table: Recoding z into f.
+Old Value,New Value,Value Label
+11,1,11
+12,2,12
+13,3,13
+14,4,14
+15,5,15
+16,6,16
+
 Table: Data List
 u,v,w,x,y,z,a,b,c,d,e,f
-11,11,11,11,11,11,6.00,5.00,4.00,3.00,2.00,1.00
-12,12,12,12,12,12,1.00,6.00,5.00,4.00,3.00,2.00
-13,13,13,13,13,13,2.00,1.00,6.00,5.00,4.00,3.00
-14,14,14,14,14,14,3.00,2.00,1.00,6.00,5.00,4.00
-15,15,15,15,15,15,4.00,3.00,2.00,1.00,6.00,5.00
-16,16,16,16,16,16,5.00,4.00,3.00,2.00,1.00,6.00
+11,11,11,11,11,11,6,5,4,3,2,1
+12,12,12,12,12,12,1,6,5,4,3,2
+13,13,13,13,13,13,2,1,6,5,4,3
+14,14,14,14,14,14,3,2,1,6,5,4
+15,15,15,15,15,15,4,3,2,1,6,5
+16,16,16,16,16,16,5,4,3,2,1,6
 
 Table: Variables
 Name,Position,Print Format,Write Format,Missing Values
-a,7,F8.2,F8.2,6
-b,8,F8.2,F8.2,5; 6
-c,9,F8.2,F8.2,4; 5; 6
-d,10,F8.2,F8.2,3 THRU 6
-e,11,F8.2,F8.2,2 THRU 6
-f,12,F8.2,F8.2,1 THRU 6
+a,7,F1.0,F1.0,6
+b,8,F1.0,F1.0,5; 6
+c,9,F1.0,F1.0,4; 5; 6
+d,10,F1.0,F1.0,3 THRU 6
+e,11,F1.0,F1.0,2 THRU 6
+f,12,F1.0,F1.0,1 THRU 6
 ])
 AT_CLEANUP
 
@@ -77,50 +131,63 @@ end data.
 
 missing values x('asdfk') y(9).
 
-autorecode x y into A B/descend.
+autorecode x y into A B/descend/print.
 
 list.
 compute Z=trunc(y/2).
+formats z(F1.0).
 autorecode z into W.
 list.
 ])
 AT_CHECK([pspp -O format=csv autorecode.sps], [0],
   [Table: Reading 1 record from INLINE.
 Variable,Record,Columns,Format
-X,1,1-  5,A5
-Y,1,7-  7,F1.0
+X,1,1-5,A5
+Y,1,7-7,F1.0
+
+Table: Recoding X into A.
+Old Value,New Value,Value Label
+lasdj,1,lasdj
+lajks,2,lajks
+asdfj,3,asdfj
+asdfk,4,asdfk
+
+Table: Recoding Y into B.
+Old Value,New Value,Value Label
+2,1,2
+1,2,1
+0,3,0
+9,4,9
 
 Table: Data List
 X,Y,A,B
-lasdj,1,1.00,2.00
-asdfk,0,4.00,3.00
-asdfj,2,3.00,1.00
-asdfj,1,3.00,2.00
-asdfk,2,4.00,1.00
-asdfj,9,3.00,4.00
-lajks,9,2.00,4.00
-asdfk,0,4.00,3.00
-asdfk,1,4.00,2.00
+lasdj,1,1,2
+asdfk,0,4,3
+asdfj,2,3,1
+asdfj,1,3,2
+asdfk,2,4,1
+asdfj,9,3,4
+lajks,9,2,4
+asdfk,0,4,3
+asdfk,1,4,2
 
 Table: Data List
 X,Y,A,B,Z,W
-lasdj,1,1.00,2.00,.00,1.00
-asdfk,0,4.00,3.00,.00,1.00
-asdfj,2,3.00,1.00,1.00,2.00
-asdfj,1,3.00,2.00,.00,1.00
-asdfk,2,4.00,1.00,1.00,2.00
-asdfj,9,3.00,4.00,.  ,.  @&t@
-lajks,9,2.00,4.00,.  ,.  @&t@
-asdfk,0,4.00,3.00,.00,1.00
-asdfk,1,4.00,2.00,.00,1.00
+lasdj,1,1,2,0,1
+asdfk,0,4,3,0,1
+asdfj,2,3,1,1,2
+asdfj,1,3,2,0,1
+asdfk,2,4,1,1,2
+asdfj,9,3,4,.,.
+lajks,9,2,4,.,.
+asdfk,0,4,3,0,1
+asdfk,1,4,2,0,1
 ])
 AT_CLEANUP
 
-
-
 AT_SETUP([AUTORECODE long strings and check the value labels])
 AT_DATA([ar.sps],
-  [data list notable list /s (a16) x *.
+  [data list notable list /s (a16) x (f1.0).
 begin data.
 widgets      1
 thingummies  2
@@ -131,36 +198,44 @@ thingummies  6
 oojimiflips  7
 end data.
 
-autorecode s into new.
+variable labels s 'tracking my stuff'.
+value labels /s 'thingummies' 'Funny sticky things'.
+
+autorecode s into new/print.
 
 list.
 
-display dictionary.
+display dictionary/variables=new.
 ])
 
 AT_CHECK([pspp -O format=csv ar.sps], [0],
-  [Table: Data List
+  [Table: Recoding s into new (tracking my stuff).
+Old Value,New Value,Value Label
+oojars,1,oojars
+oojimiflips,2,oojimiflips
+thingummies,3,Funny sticky things
+widgets,4,widgets
+
+Table: Data List
 s,x,new
-widgets,1.00,4.00
-thingummies,2.00,3.00
-oojars,3.00,1.00
-widgets,4.00,4.00
-oojars,5.00,1.00
-thingummies,6.00,3.00
-oojimiflips,7.00,2.00
+widgets,1,4
+thingummies,2,3
+oojars,3,1
+widgets,4,4
+oojars,5,1
+thingummies,6,3
+oojimiflips,7,2
 
 Table: Variables
-Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format,Missing Values
-s,1,,Nominal,Input,16,Left,A16,A16,
-x,2,,Scale,Input,8,Right,F8.2,F8.2,
-new,3,,Scale,Input,8,Right,F8.2,F8.2,
+Name,Position,Label,Measurement Level,Role,Width,Alignment,Print Format,Write Format
+new,3,tracking my stuff,Nominal,Input,8,Right,F1.0,F1.0
 
 Table: Value Labels
 Variable Value,,Label
-new,1.00,oojars
-,2.00,oojimiflips
-,3.00,thingummies
-,4.00,widgets
+tracking my stuff,1,oojars
+,2,oojimiflips
+,3,Funny sticky things
+,4,widgets
 ])
 
 AT_CLEANUP
@@ -168,10 +243,10 @@ AT_CLEANUP
 
 AT_SETUP([AUTORECODE group subcommand])
 AT_DATA([ar-group.sps],
-[data list notable list /x * y *.
+[data list notable list /x y (f8.0).
 begin data.
 11 10
-12 12 
+12 12
 13 15
 14 11
 15 12
@@ -180,28 +255,40 @@ end data.
 
 missing values y (12).
 
-autorecode 
+autorecode
        x y into a b
-       /group.
+       /group
+       /print.
 
 list.
 display variables /variables=a b.
 ])
 
 AT_CHECK([pspp -O format=csv ar-group.sps], [0],
-[Table: Data List
+[Table: Recoding grouped variables.
+Old Value,New Value,Value Label
+10,1,10
+11,2,11
+13,3,13
+14,4,14
+15,5,15
+16,6,16
+18,7,18
+12,8,12
+
+Table: Data List
 x,y,a,b
-11.00,10.00,2.00,1.00
-12.00,12.00,8.00,8.00
-13.00,15.00,3.00,5.00
-14.00,11.00,4.00,2.00
-15.00,12.00,5.00,8.00
-16.00,18.00,6.00,7.00
+11,10,2,1
+12,12,8,8
+13,15,3,5
+14,11,4,2
+15,12,5,8
+16,18,6,7
 
 Table: Variables
 Name,Position,Print Format,Write Format,Missing Values
-a,3,F8.2,F8.2,8
-b,4,F8.2,F8.2,8
+a,3,F1.0,F1.0,8
+b,4,F1.0,F1.0,8
 ])
 
 AT_CLEANUP
@@ -221,7 +308,8 @@ end data.
 
 
 autorecode x y into a b
-       /group.
+       /group
+       /print.
 
 delete variables x y.
 
@@ -230,13 +318,24 @@ list.
 ])
 
 AT_CHECK([pspp -O format=csv strings.sps], [0],
-[Table: Data List
+[Table: Recoding grouped variables.
+Old Value,New Value,Value Label
+,1,
+bert,2,bert
+charlie,3,charlie
+delta,4,delta
+echo,5,echo
+fred,6,fred
+nothing,7,nothing
+windows,8,windows
+
+Table: Data List
 a,b
-6.00,2.00
-3.00,1.00
-4.00,5.00
-1.00,8.00
-1.00,7.00
+6,2
+3,1
+4,5
+1,8
+1,7
 ])
 
 AT_CLEANUP
@@ -250,24 +349,35 @@ AT_DATA([ar-strings.sps],
 begin data.
 one    nine
 two    ten
-three  eleven 
+three  eleven
 four   nought
 end data.
 
-autorecode a b into x y 
-       /group.
+autorecode a b into x y
+       /group
+       /print.
 
 list.
 ])
 
-AT_CHECK([pspp -O format=csv ar-strings.sps], [0],
-[dnl
+AT_CHECK([pspp -O format=csv ar-strings.sps], [0], [dnl
+Table: Recoding grouped variables.
+Old Value,New Value,Value Label
+eleven,1,eleven
+four,2,four
+nine,3,nine
+nought,4,nought
+one,5,one
+ten,6,ten
+three,7,three
+two,8,two
+
 Table: Data List
 a,b,x,y
-one,nine,5.00,3.00
-two,ten,8.00,6.00
-three,eleven,7.00,1.00
-four,nought,2.00,4.00
+one,nine,5,3
+two,ten,8,6
+three,eleven,7,1
+four,nought,2,4
 ])
 
 AT_CLEANUP
@@ -277,7 +387,7 @@ AT_CLEANUP
 AT_SETUP([AUTORECODE /blank])
 
 AT_DATA([auto-blank.sps],  [dnl
-data list notable list /x (a8) y * z (a16).
+data list notable list /x (a8) y (f8.0) z (a16).
 begin data.
 one   2  fred
 two   4  ""
@@ -286,19 +396,35 @@ two   4  ""
 three 2  charliebrown
 end data.
 
-autorecode variables x y z into a b c  /blank=missing.
+autorecode variables x y z into a b c  /blank=missing /print.
 
 list a b c y.
 ])
 
 AT_CHECK([pspp -O format=csv auto-blank.sps], [0], [dnl
+Table: Recoding x into a.
+Old Value,New Value,Value Label
+one,1,one
+three,2,three
+two,3,two
+
+Table: Recoding y into b.
+Old Value,New Value,Value Label
+2,1,2
+4,2,4
+
+Table: Recoding z into c.
+Old Value,New Value,Value Label
+charliebrown,1,charliebrown
+fred,2,fred
+
 Table: Data List
 a,b,c,y
-1.00,1.00,2.00,2.00
-3.00,2.00,.  ,4.00
-.  ,2.00,2.00,4.00
-.  ,1.00,1.00,2.00
-2.00,1.00,1.00,2.00
+1,1,2,2
+3,2,.,4
+.,2,2,4
+.,1,1,2
+2,1,1,2
 ])
 
 AT_CLEANUP
@@ -322,26 +448,37 @@ end data.
 
 temporary.
 select if y > 1.
-autorecode x y into A B/descend.
+autorecode x y into A B/descend/print.
 list.
 ])
-AT_CHECK([pspp -O format=csv autorecode.sps], [0],
-  [Table: Reading 1 record from INLINE.
+AT_CHECK([pspp -O format=csv autorecode.sps], [0], [dnl
+Table: Reading 1 record from INLINE.
 Variable,Record,Columns,Format
-X,1,1-  5,A5
-Y,1,7-  7,F1.0
+X,1,1-5,A5
+Y,1,7-7,F1.0
+
+Table: Recoding X into A.
+Old Value,New Value,Value Label
+lajks,1,lajks
+asdfk,2,asdfk
+asdfj,3,asdfj
+
+Table: Recoding Y into B.
+Old Value,New Value,Value Label
+9,1,9
+2,2,2
 
 Table: Data List
 X,Y,A,B
-lasdj,1,.  ,.  @&t@
-asdfk,0,2.00,.  @&t@
-asdfj,2,3.00,2.00
-asdfj,1,3.00,.  @&t@
-asdfk,2,2.00,2.00
-asdfj,9,3.00,1.00
-lajks,9,1.00,1.00
-asdfk,0,2.00,.  @&t@
-asdfk,1,2.00,.  @&t@
+lasdj,1,.,.
+asdfk,0,2,.
+asdfj,2,3,2
+asdfj,1,3,.
+asdfk,2,2,2
+asdfj,9,3,1
+lajks,9,1,1
+asdfk,0,2,.
+asdfk,1,2,.
 ])
 AT_CLEANUP
 
@@ -350,7 +487,7 @@ dnl For compatibility, make sure that /INTO (with leading slash) is accepted
 dnl (bug #48762)
 AT_SETUP([AUTORECODE with /INTO])
 AT_DATA([autorecode.sps],
-  [data list list notable /x .
+  [data list list notable /x (f8.0).
 begin data.
 1
 8
@@ -361,19 +498,48 @@ begin data.
 8
 end data.
 
-autorecode x  /into y.
+autorecode x  /into y /print.
 
 list.
 ])
 AT_CHECK([pspp -O format=csv autorecode.sps], [0],
-[Table: Data List
+[Table: Recoding x into y.
+Old Value,New Value,Value Label
+-901,1,-901
+1,2,1
+4,3,4
+8,4,8
+99,5,99
+
+Table: Data List
 x,y
-1.00,2.00
-8.00,4.00
--901.00,1.00
-4.00,3.00
-1.00,2.00
-99.00,5.00
-8.00,4.00
+1,2
+8,4
+-901,1
+4,3
+1,2
+99,5
+8,4
+])
+AT_CLEANUP
+
+
+AT_SETUP([AUTORECODE with /BLANK without specifier])
+
+AT_DATA([autorecode.sps], [data list notable list /x (a18).
+begin data
+one
+two
+three
+end data.
+
+* /BLANK should be either =MISSING or =VALID
+autorecode x /into y
+ /blank
+
+execute.
 ])
+
+AT_CHECK([pspp -O format=csv autorecode.sps], [1], [ignore])
+
 AT_CLEANUP