I’ve shown how you can grab data from SPSS and use it in Python commands, and I figured a post about the opposite process (taking data in Python and turning it into an SPSS data file) would be useful. A few different motivating examples are:
- Creating a set of permutations using the itertools Python library (see 1 and 2 for examples)
- Identifying isolated neighborhoods in a set of network data and returning those to an SPSS data file
- Grabbing items from the Google Places API
So first as a simple illustration, lets make a set of simple data in Python as a list of lists.
BEGIN PROGRAM Python. MyData = [(1,2,'A'),(4,5,'B'),(7,8,'C')] END PROGRAM.
Now to export this data into SPSS you can use
spss.StartDataStep(), append variables using
varlist.append and then add cases using
cases.append (see the Python programming PDF that comes with SPSS in the help to peruse all of these functions plus the documentation). This particular codes adds in 3 variables (two numeric and one string) and then loops through the
data python object and adds those cases to the define SPSS dataset.
BEGIN PROGRAM Python. import spss spss.StartDataStep() #start the data setp MyDatasetObj = spss.Dataset(name=None) #define the data object MyDatasetObj.varlist.append('X1',0) #add in 3 variables MyDatasetObj.varlist.append('X2',0) MyDatasetObj.varlist.append('X3',1) for i in MyData: #add cases in a loop MyDatasetObj.cases.append(i) spss.EndDataStep() END PROGRAM.
Here this will create a SPSS dataset and give it a generic name of the form xDataset? where ? will be an incrementing number based on the session history of naming datasets. To specify the name beforehand you need to use the SPSS command
DATASET DECLARE X. and then place the dataset name as the option in the
As linked above I have had to do this a few times from Python objects, so I decided to make a bit of a simpler SPSS function to take care of this work for me.
BEGIN PROGRAM Python. #Export to SPSS dataset function import spss def SPSSData(data,vars,types,name=None): VarDict = zip(vars,types) #combining variables and #formats into tuples spss.StartDataStep() datasetObj = spss.Dataset(name=name) #if you give a name, #needs to be declared #appending variables to dataset for i in VarDict: datasetObj.varlist.append(i,i) #now the data for j in data: datasetObj.cases.append(list(j)) spss.EndDataStep() END PROGRAM.
This code takes an arbitrary Python object (
data), and two lists, one of the SPSS variable names and the other of the format for the SPSS variables (either 0 for numeric or an integer for the size of the strings). To transform the data to SPSS, it needs a list of the same dimension as the variables you have defined, so this works for any
data object that can be iterated over and that can be coerced to returning a list. Or more simply, if
list(data) returns a list of the same dimensions for the variables you defined, you can pass the
data object to this function. This won’t work for all situations, but will for quite a few.
So with the permutation examples I previously linked to, we can use the itertools library to create a set of all the different permutations of string
ABC. Then I define a set of variables and formats as lists, and then we can use the
SPSSData function I created to make a new dataset.
DATASET DECLARE Combo. BEGIN PROGRAM Python. import itertools YourSet = 'ABC' YourLen = 3 x = itertools.permutations(YourSet,YourLen) v = ['X1','X2','X3'] t = [1,1,1] SPSSData(data=x,vars=v,types=t,name='Combo') END PROGRAM.
This work flow is not optimal if you are creating the data in a loop (such as in the Google Places API example I linked to earlier), but works well for static python objects, such as the object returned by itertools.