get file "d:\data08_2.sav".

* 1.  System variables.

compute id = $casenum.
exe.
list id.

compute miss = $sysmis.
compute miss1 = 1.
if missing(q1) or missing(q3) miss1 = $sysmis.
exe.
list miss q1 q3 miss1.

compute today = $jdate.
exe.

* Task 1:  Taking a simple random sample.

set seed 156323669.
compute ran_num = uniform(100) + 1.
sort cases by ran_num.
list id ran_num.

temporary.
select if $casenum le 6.
list id ran_num.

temporary.
n of cases 6.
list id ran_num.

temporary.
sample 6 from 15.
exe.
list id ran_num.

* Task 2:  Creating a random identification variable.

set seed 185693256.
compute ran_num1 = rv.normal(100, 10).
desc var = ran_num1.

sort cases by ran_num1.
compute my_id = $casenum.
list my_id ran_num1.

* Task 3:  Creating an index number.

get "d:\kidslw.sav.
list famid kidname age wt sex.

compute index1 = 1.
if famid = lag(famid) index1 = lag(index1) + 1.
exe.
list famid index1 kidname age wt sex.

* Task 4:  Creating a flag variable for complete cases.

get file "d:\data08_2.sav".

missing values q1 to q5 (-8 -9).
compute comp_flag = 1.
if missing(q1) or missing(q2) or missing(q3) comp_flag = 0.
value labels comp_flag 0 "has at least one missing value" 1 "complete case" .
exe.
freq var = comp_flag.

list q1 q2 q3 comp_flag.

filter by comp_flag.
regression
dep = q1
/method = enter q2
/descriptives = n.

use all.
* filter off.
compute nv = nvalid(q1, q2, q3).
compute nm = nmissing(q1, q2, q3).
list q1 q2 q3 comp_flag nv nm.

* 2.  A little more on creating numerical variables and using numeric formats.

compute my_id = $casenum.
if sysmis(q1) and num1 < 45 or num2 > 50 newvar6 = 1.
if q3 ~= $sysmis and q1 = 1 newvar6 = 2.
exe.

compute dummy_var1 eq (old_var=1).
* compute dummy_var = 0.
* if old_var = 1 dummy_var = 1.
* if missing(old_var) dummy_var = $sysmis.
exe.

compute dummy_var2 = (old_var=2).
compute filter1 = any(my_id, 1, 5, 7, 9).
* compute filter2 = 0.
* if my_id = 1 or my_id = 5 or my_id = 7 or my_id = 9 filter2 = 1.
exe.
list my_id q1 num1 num2 newvar6 dummy_var1 dummy_var2 filter1.

compute rnd_mean = rnd(mean(q1 to q5)).
exe.

numeric n1 n2.
numeric n3 (f4.0) n4 (f8.4).

compute n3 = q1.
compute n4 = q2.
exe.
list q1 n3 q2 n4.

formats num1 (dollar6) num2 (f3.1).
list num1 num2.

* 3.  String formats.

* concatenating variables.
string str_concat (A5).
compute str_concat = concat( rtrim(str1), " ", rtrim(str2), " ", rtrim(str3) ).
exe.
list str1 str2 str3 str_concat.

*substring.
string str_sub (A2).
compute str_sub = char.substr(str_concat, 3, 1).
exe.
list str_concat str_sub.

* number of bytes.
compute bites = mblen.byte(str_concat, 1).
exe.
list bites
 /cases from 1 to 4.

*turning value labels into values in a string variable.
string varlab (A20).
compute varlab = valuelabel(q5).
list q5 varlab.

* 4.  Collapsing across observations.

get file 'd:\data08_2.sav'.
aggregate outfile 'd:\new.sav'
 /break gender
 /aveq1 = mean(q1).

get file 'd:\new.sav'.
list.

get file 'd:\data08_2.sav'.
compute bvar = 1.
if $casenum gt 5 bvar = 2.
if $casenum gt 9 bvar = 3.
if $casenum gt 12 bvar = 4.
exe.
aggregate outfile = * mode = addvariables
 /break gender bvar
 /sdq1 "standard deviation of q1" = sd(q1)
 /sumq1 "sum of q1" = sum(q1)
 /missq3 "unweighted number of system missing for q3" = numiss(q3)
 /pinq5 "percent of cases between values 2 and 4 for q5" = pin(q5, 2, 4).
list bvar gender q1 sdq1 sumq1 q3 missq3 q5 pinq5.

* Task 5:  Creating a level-2 variable.

data list list / id score1.
begin data.
1 6
1 2
1 4
2 2
2 2
2 5
3 4
3 5
3 6
4 1
4 2
4 3
end data.
list.

sort cases id.
aggregate outfile = * mode=addvariables
 /break id
 /ave_score = mean(score1).
list.

* 5. Reshaping data.

get file 'd:\data08_2.sav'.
list q1 to q3
 /cases from 1 to 10.

* reshaping from wide to long.
varstocases
 /make q from q1 to q3
 /index = number
 /id = id
 /drop old_var to q5.
list.

get file 'd:\long.sav'.
list.

* reshaping from long to wide.
sort cases by trial.
casestovars
 /id = trial
 /index = ivar
 /drop out2.
list.

* 6. Counting.

get file 'd:\data08_2.sav'.

count total = q1 to q3 (3).
exe.
list q1 to q3 total.

* 7.  The show command.

show license.

show directory version n cache $vars format.

compute f82 = 1.
set format=f8.6.
compute f86= 1.
exe.
list f82 f86.

set format = f8.2.

* 8.  Active data sets and output files.

dataset activate.
dataset close.
dataset copy.
dataset declare.
dataset display.
dataset name.

output activate.
output close.
output display.
output name.
output new.
output open.
output save.

oms.
omsend.
omsinfo.
omslog.

* 9.  More on saving files.

* compressing the data file.
save outfile "d:\mydata_compress.sav"
/compress.

* excluding unselected cases from the saved data file.
filter by comp_flag.
save outfile "d:\mydata_comp.sav"
/unselected = delete.

get file "d:\mydata_comp.sav".

get file "d:\data08_2.sav".

* saving the SPSS data file as a Stata 8 S/E file.
save translate outfile = "d:\mydata.dta"
/version = 8
/type = stata
/edition = se.

* saving the SPSS data file as a SAS data file.
save translate outfile = "d:\mydata.sas7bdat"
/valfile = "d:\labels.sas"
/platform = windows
/type = sas
/version = 7
/replace.

* saving the SPSS data file as a comma separated values file.
save translate outfile = "d:\mydata.csv"
/type = csv.

* saving the SPSS data file as a csv file when variables names are in the first row.
save translate outfile = "d:\mydata.csv"
/type = csv
/fieldnames
/cells = labels.

* 10.  Dates.

* 11.  Other commands that we didn't cover.

flip.
insert.
apply dictionary.
datafile attribute.
variable attribute.
update.
