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.
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.
#data-manipulation#python#Python-programability#SPSS#SPSSStatistics