Seite 1 von 1

Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Do 24. Mär 2022, 14:49
von Ann-Kathrin Mertineit
Hallo zusammen,ich habe ein Problem mit dem Transfer meiner Daten zu SPSS. Der Export funtioniert zwar, jedoch werden meine Variablen nicht als "Numerisch" angesehen, sondern als "Zeichenfolge" und ich kann dies nicht ändern. In den Deskripten Statistiken werden mir somit meine Werte nicht angezeigt auch nicht die richtige Beschriftung. Ich habe mal ein Bild angehängt. Vielleicht könnt Ihr mir helfen, wo der Fehler liegt und wie ich diesen beheben kann?

Vielen Dank im Voraus und liebe Grüße!
Ann-Kathrin

Re: Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Do 24. Mär 2022, 15:01
von Ann-Kathrin Mertineit
Hallo zusammen,

ich habe festgestellt, dass die COdierung von "A1 - A5" zu dem Problem geführt hat, dass SPSS den Typ als Zeichenfolge abseichert. Wenn Ich den Code in LimeSUrvey jedoch ändere, werden alle DAten rausgeschmissen. Gibt es in SPSS eine Möglichkeit, dass ich den COde A1 auf =1 setzte und damit der Typ als Numerisch anerkannt wird, um weitere Berechnungen anfertigen zu können?

Vielen Danke vorab!
Ann-Kathrin

Re: Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Do 24. Mär 2022, 17:39
von ponderstibbons
Dann recodiere Angaben wie A1, A2, A3 zu 1, 2 und 3, bevor Du den Variablentyp änderst.
Oder Du wählst "automatisch umcodieren", um neue numerische Variablen auf Basis der
bestehenden String-Variablen zu erzeugen.

Re: Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Do 21. Apr 2022, 15:52
von tiukas
Hallo allerseits,

ich habe genau dasselbe Problem. Was passiert eigentlich beim automatisch rekodieren, wenn eine Antwortkategorie fehlt? Ist das Programm schlau genug
A1 A2 A3 A4 in 1 2 3 4 umzuwandeln, wenn nur Fälle für 2 3 und 4 vorliegen?

Aus Stata kenne ich das, dass er dann die erste Kategorie einfach rausschmeissen würde, weshalb ich das bisher einfach über normales rekodieren und dann ein Search/Replace der Label (über die UI) gelöst habe. Diesbetreffend würde mich auch interessieren, ob man das "Ziel" der Wertelabel auch über die Syntax ändern kann. (Bzw. wenn Autorekdoieren das Problem schon löst wäre das auch ausreichend)

Vielen Dank,
Tiukas

Re: Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Do 21. Apr 2022, 15:56
von ponderstibbons
ich habe genau dasselbe Problem. Was passiert eigentlich beim automatisch rekodieren, wenn eine Antwortkategorie fehlt? Ist das Programm schlau genug
A1 A2 A3 A4 in 1 2 3 4 umzuwandeln, wenn nur Fälle für 2 3 und 4 vorliegen?

Probier's halt aus.

Re: Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Fr 22. Apr 2022, 11:31
von tiukas
Habe es ausprobiert und es rekodiert nur die ausprägungen wo auch Fälle da sind. Wie befürchtet.

Also ist wohl Python angesagt :(

Re: Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Fr 22. Apr 2022, 13:30
von ponderstibbons
Mir ist nicht klar, wozu Ausprägungen umcodieren sollte, die nicht vorkommen. Welches ist der Zweck?

Re: Probleme SPSS und Daten aus LimeSurvey

BeitragVerfasst: Mo 25. Apr 2022, 15:05
von tiukas
Wenn man Skalen hat und aus irgendwelchen Gründen was nicht angegeben wurde zerhaut es dir die Skala, wichtiger aber noch, damit man überhaupt sieht, dass es weggefallen ist. In meinem Fall merge ich mehrere Datensätze aus verschiedenen Städten bzw. Ländern zusammen. Die sind alle leider nicht so groß geworden, wie wir gehofft hatten, da das Thema die Leute nicht so gerockt hat. Insofern kann es durchaus mal vorkommen, dass in einzelnen Datensätzen Fälle fehlen. Dann brauchten wir auch noch landesspezifische Anpassungen, wo es extrem unschön wäre wenn die einfach ungesehen wegfallen.

Um das Problem zu umgehen, habe ich die Syntax/den Python Code unterhalb geschrieben. Falls jemand das gleiche Problem hat und gerne die Limesurvey Werte Convertiert haben möchte kann einfach das hier unten in die Syntax kopiert werden. Wichtig dabei ist zu beachten, das ganze ist für die Default Werte in den Limesurvey Baterrien ausgelegt. Wenn ihr da irgendwelchen Fancy-Kram reingeschrieben habt (A32Lime9 z.B.), funktioniert es eventuell nicht. Dann wirklich besser autorecode verwenden.

Der Code erhät euch eure existierenden Wertelabels und passt euch diese auch für nicht existierende Werte an. Wenn ihr Werte ohne Wertelabel habt, kann das Programm damit ebenfalls umgehen - diese werden sofern sie eine Zahl enthalten einfach in diese Zahl umgewandelt, erhalten aber kein (neues) Wertelabel. Die Antwort "andere Antwort" bekommt standardmäßig den Wert -9 und das label "other anwer".

Im Code unten habe die Konversion in den Variablentyp "numeric" noch ausgeschaltet. Checkt bitte, dass auch wirklich alle Antworten konvertiert wurden, bevor ihr dies macht. Eventuell deckt mein Code einen Sonderfall bei euch nicht mit ab.
Code: Alles auswählen
BEGIN PROGRAM PYTHON3.
import spss, spssaux, re, spssdata

print("Warning: This program is meant for recoding limesurvey default item batteries to a numeric format.\
Eventual customisations may not be covered by this code. Please make sure to check the results for errors.\
  By default variables remain in string format and need to be manually converted")

sDict = spssaux.VariableDict() #Get a copy of the Variable Dictionary (can't be directly changed!)

infotext = "Variables processed: " # begin infotext

#Iterate through all variables (in the dictionary - all variables in this case)
for var in sDict:
    #Only Adress variables which are of type String and have value labels.
    if spss.GetVariableType(var.index) > 0 and var.ValueLabels != {} :
        varname = spss.GetVariableName(var.index) #Get variable Name
        infotext += varname + ', ' #Add processed variable to infotext
       
        #Begin Value Labels and Recode commands for active variable
        commandlab = 'Value Labels ' + varname + ' '
        commandrecode = 'Recode ' + varname + ' '
        commandalter = 'Alter Type ' +  varname + '(f2).'
       
        #Get unique values of Variable
        varvalues = set(spssdata.Spssdata(varname, names=False).fetchall())
        varvalues = set([item[0] for item in varvalues])

        #Write the recode code for the variable
        for item in varvalues:
            if any(char.isdigit() for char in item): #make sure only values containing digits are processed
                newkey = re.findall(r'\d+', item)[0] #Get first number in key (value of label)
                newkey = re.sub(r'0+(.+)', r'\1', newkey) #Cut leading zeros from number
               
                #Add entry to recode command
                commandrecode = commandrecode + '("' + item + '"="' + newkey + '") '
            if "-" in item: #in case "other" answer
                newkey = "-9" #set value for "other" answer
               
                #Add entry for Value labels and recode commands
                commandrecode = commandrecode + '("' + item + '"="' + newkey + '") '
                commandlab = commandlab + newkey + ' ' + '"' + 'Other answer' + '"' + ' '

       
       
        #Open entry for each value of valuelabels
        for key,val in var.ValueLabels.items():

            newkey = re.findall(r'\d+', key)[0] #Get first number in key (value of label)
            newkey = re.sub(r'0+(.+)', r'\1', newkey) #Cut leading zeros from number
           
            #Add entry Value labels command:
            commandlab = commandlab + newkey + ' ' + '"' + val + '"' + ' '
       
        #Complete commands for SPSS:
        commandlab = commandlab + '.'   
        commandrecode = commandrecode + '.\n Execute.'
       
        #Check codes
        #print(commandlab) #Syntax for labeling
        #print(commandrecode) #Syntax for recoding
        #print(varvalues) #Unique values for variable
       
        #Execute recode and relabel (and alter type).
        spss.Submit(commandlab) #relabel
        spss.Submit(commandrecode) #recode
        #spss.Submit(commandalter) #alter type to numeric
       
        #Show frequencies of altered variables to look for errors
        spss.Submit("frequencies " + varname)
   
#Print Infos
print(infotext)
print("Warning: Only Values containing numbers have been recoded.\
Please check your dataset to make sure all entries have been affected.")
end program.