View Only

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:

So first as a simple illustration, lets make a set of simple data in Python as a list of lists.

Now to export this data into SPSS you can use

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

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.

This code takes an arbitrary Python object (

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

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.

#data-manipulation

#python

#Python-programability

#SPSS

#SPSSStatistics

- 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

`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.

#data-manipulation

#python

#Python-programability

#SPSS

#SPSSStatistics

2 comments

5 views

Archive User

Tue January 23, 2018 08:14 PM

You would either need to pipe the results from the console to a text file, or save the results via SPSS (such as exporting a chart to a PNG file, or saving the output spv file). If you can be more specific about what you are doing than I can give better advice.