PK
:gRɈR R META-INF/MANIFEST.MF Name: SPSS_TUTORIALS_DUMMIFY
Dialog-Specs: SPSS_TUTORIALS_DUMMIFY.spd
Command-Specs: SPSS_TUTORIALS_DUMMIFY.xml
Code-Files: SPSS_TUTORIALS_DUMMIFY.py
Summary: Create Dummy Variables for Regression Analysis
Author: Ruben Geert van den Berg
Version: 1.0.0
Product-Version: 24
Plugins: Python
Python-Version: 3
Links: www.spss-tutorials.com
PK
:gR@bc SPSS_TUTORIALS_DUMMIFY.py#AUTHOR: RUBEN GEERT VAN DEN BERG
#SOURCE: WWW.SPSS-TUTORIALS.COM
#VERSION: 1
#LAST UPDATE: 2021-02-03: CREATED
#DEV LOCATION: C:\Program Files\IBM\SPSS\Statistics\27\Python3\Lib\site-packages
from extension import Template, Syntax, processcmd
def Run(args):
oobj = Syntax([
Template("VARIABLES", subc="", ktype="existingvarlist", var="varSpec", islist=True),
Template("NEWLABELS", subc="OPTIONS",var="newLabs",ktype="str"),
Template("REFCAT", subc="OPTIONS",var="reference",ktype="str"),
Template("ACTION", subc="OPTIONS",var="action",ktype="str")
])
args = args[list(args.keys())[0]] #HAS CHANGED SINCE PYT3!!
processcmd(oobj, args, dummify)
def dummify(varSpec,newLabs = 'lablab',action = 'run',reference = None):
import spss,spssaux,spssdata
spssSyn = ''
#RETRIEVE EXISTING VARNAMES
oldVars = spssaux.GetVariableNamesList()
oldVarsLower = [var.lower() for var in oldVars]
#EXPAND INPUT VARSPEC AND CORRECT CASING/ORDER
varString = ' '.join(varSpec)
sDict = spssaux.VariableDict(caseless = True)
varListCased = []
for var in sDict.expand(varString):
ind = [oldvar.lower() for oldvar in oldVars].index(var.lower())
varListCased.append(oldVars[ind])
if varString.lower() == 'all':
varListCased.sort(key=lambda var: sDict[var].VariableIndex)
#CHECK IF FILTER ON
spss.Submit(['PRESERVE.','SET TVARS NAMES.'])
filtVar = spssaux.getDatasetInfo('filter')
spss.Submit('RESTORE.')
if filtVar:
print('Warning: a FILTER is in effect. This may affect the results of this tool.')
#CHECK IF SPLITVAR IS ON -> SWITCH OFF BECAUSE SPSSDATA CRASHES ON IT
splitVars = spss.GetSplitVariableNames()
if splitVars:
print("Warning: a SPLIT FILE is in effect. This is ignored with regard to creating dummy variables.")
spss.Submit('SPLIT FILE OFF.')
#LOOP OVER INPUT VARS
for var in varListCased:
distVals = []
for case in spssdata.Spssdata(var):
if (case[0] is not None) and (not case[0] in distVals):
distVals.append(case[0])
#CHECK IF VAR = SPSS STRING VAR
varLen = sDict[var].VariableType
if varLen > 0: #STRING VAR -> CLEAN UP DISTVALS
distVals = [val.replace("'","''").strip() for val in distVals]
distVals.sort()
#CHECK IF SPSS VAR IS NOT CONSTANT OR EMPTY
if len(distVals) < 2:
print ("No dummies are created for %(var)s because it has fewer than 2 valid values."%locals())
else: #AT LEAST 2 VALID VALUES IN VAR
#TAKE CARE OF REFERENCE CAT -IF ANY- NOW
if reference == 'first':
del distVals[0]
if reference == 'last':
del distVals[-1]
oriVar = var #ORIVAR = ORIGINAL VARIABLE NAME/LABEL FOR VARLABELING DUMVARS
if newLabs[:3] == 'lab':
oldLab = sDict[var].VariableLabel.replace("'","''") #SPSS ESCAPE SINGLE QUOTE
if oldLab: #OLD VARIABLE ACTUALLY HAS VARLAB -> OTHERWISE STICK TO VARNAM
oriVar = oldLab
#LOOP OVER DISTINCT VALUES IN TARGET VAR
cntr = 1
for val in distVals:
if varLen == 0: #SKIP FOR STRINGVARS
if val == int(val):
val = int(val)
lab = str(val) #DOES NOT CAUSE PROBLEM FOR STRINGS?
if newLabs[3:] == 'lab': #REPLACE VALUE BY VALLAB IF ANY
vallabs = sDict[var].ValueLabels
if lab in vallabs:
lab = vallabs[lab].replace("'","''")
#CHECK IF NEW VAR ALREADY EXISTS
while var.lower() + '_' + str(cntr) in oldVarsLower:
cntr += 1
dumVarNam = var + '_' + str(cntr)
if varLen == 0: #SPSS TARGET VAR NUMERIC
spssSyn += '''
COMPUTE %(dumVarNam)s = (%(var)s = %(val)s).'''%locals()
else: #SPSS TARGET VAR STRING
spssSyn += '''
IF(NOT MISSING(%(var)s)) %(dumVarNam)s = (%(var)s = '%(val)s').'''%locals()
spssSyn += '''
VARIABLE LABELS %(dumVarNam)s '%(oriVar)s = %(lab)s'.'''%locals()
cntr += 1
if not spssSyn: #SHOULD ONLY HAPPEN IF NO INVARS > 1 DIST VALID VAL
print('No dummy variables are created because none of the input variables have more than 1 distinct valid value.')
else: #SPSSSYN HAS BEEN CREATED
if action in ['print','both']:
print(spssSyn)
if action in ['run','both']:
spss.Submit(spssSyn + '\nEXECUTE.')
if splitVars:
spss.Submit("SPLIT FILE BY %s."%' '.join(splitVars))
# print("SPLIT FILE BY %s."%' '.join(splitVars))
PK
:gR'/ SPSS_TUTORIALS_DUMMIFY.xml
PK
:gRQE{ { SPSS_TUTORIALS_DUMMIFY.spdPK YR dialog247.properties Un0}/ Зn&е@1iȥafadHr|~c_6ʖsH!ER'o_w|toa#c1D;W2Ce6 0
N;}B<2|׆G2MvaQ|2sW̃է3h_[{rJ(
YMW!] &bPd+*n*#m#{=/t>C;?涘l2tlg??2g^֟ɍɹt = Y/_ps*@K6H-7Z\tHWL2scXsAՙ7IJd#FIU.6x BkPmo..np/7ѵK *V9j9l疤I/]V
TمOGճ+\P"뙃T("&A
M4!9=Jze"(}uK543CxCںuL .lڍh(C nKXά^]ܽsaF4YNR!
,rQ `VAcLmfh2BPK& " PK YR
dialog247.xmlYn"9ҾU+V3R3ݝnr4 YmVTvڮ5خ;Zj)ױ};>q<'BR:Npa)[vG"L #x$N#dY)>q](#.IƑɃifSXFq5x+#ʤ̃D2ׄ(i-b&]P;
HA? 30
$z+r:z
+"(ЄH5jOHEd_ (K*Ia\~C.=.u;j0]rЁi F"hLSX>wȏA qOp DgE.Ɥߏ33%ІU!=AV Q /[?8(s'hPyu!*r-ဇG#u}͖)[&0Tx?=A Y[ty k;:TtO1^8nkbv=t3 GaQ_yϦ|CbB/ ˀqЋ)M$х0`hoH8j:rj!Go6S"t١3"P vwA'{%Ă!$iD}'qniFw9&2bҰBg7WW.<'Z Vch
17A#Xjh|~NQ$
hthjϼ<ZrzqxBR14:@f@uB(ȚRzH=ʫ6κ{L#9}$eC6]QyjX>uaTɿ#*_:8,<$Eqb_(PSǡRfǿ4fxgG)Fk"m6a\ܧ\̱ީuH/26jH?b'h 컹c3nʈWXN:]s1OgoE }6W2G_ HA|7yѰ{UhD0!*dR9 ˗ؑBۭ֨Z=m7$y4nOJP6dn!Ŕa~|x'