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 `spss.Dataset(name='X')`

command.

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[0],i[1])
#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[0])`

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.

## 2 Comments