Probleme SPSS und Daten aus LimeSurvey

Alles rund um SPSS Syntax und Programmierung.

Probleme SPSS und Daten aus LimeSurvey

Beitragvon Ann-Kathrin Mertineit » Do 24. Mär 2022, 14:49

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
Dateianhänge
Datenansicht_1.png
Datenansicht_1.png (219.08 KiB) 3945-mal betrachtet
Syntax_2_2.png
Syntax_2_2.png (243.5 KiB) 3945-mal betrachtet
Variablenansicht_2.png
Variablenansicht_2.png (231.95 KiB) 3945-mal betrachtet
Ann-Kathrin Mertineit
 
Beiträge: 2
Registriert: Do 24. Mär 2022, 14:27
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Probleme SPSS und Daten aus LimeSurvey

Beitragvon Ann-Kathrin Mertineit » Do 24. Mär 2022, 15:01

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
Ann-Kathrin Mertineit
 
Beiträge: 2
Registriert: Do 24. Mär 2022, 14:27
Danke gegeben: 0
Danke bekommen: 0 mal in 0 Post

Re: Probleme SPSS und Daten aus LimeSurvey

Beitragvon ponderstibbons » Do 24. Mär 2022, 17:39

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.
ponderstibbons
 
Beiträge: 2479
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 1
Danke bekommen: 256 mal in 255 Posts

Re: Probleme SPSS und Daten aus LimeSurvey

Beitragvon tiukas » Do 21. Apr 2022, 15:52

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
tiukas
 
Beiträge: 24
Registriert: Do 2. Mär 2017, 14:41
Danke gegeben: 1
Danke bekommen: 1 mal in 1 Post

Re: Probleme SPSS und Daten aus LimeSurvey

Beitragvon ponderstibbons » Do 21. Apr 2022, 15:56

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.
ponderstibbons
 
Beiträge: 2479
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 1
Danke bekommen: 256 mal in 255 Posts

Re: Probleme SPSS und Daten aus LimeSurvey

Beitragvon tiukas » Fr 22. Apr 2022, 11:31

Habe es ausprobiert und es rekodiert nur die ausprägungen wo auch Fälle da sind. Wie befürchtet.

Also ist wohl Python angesagt :(
tiukas
 
Beiträge: 24
Registriert: Do 2. Mär 2017, 14:41
Danke gegeben: 1
Danke bekommen: 1 mal in 1 Post

Re: Probleme SPSS und Daten aus LimeSurvey

Beitragvon ponderstibbons » Fr 22. Apr 2022, 13:30

Mir ist nicht klar, wozu Ausprägungen umcodieren sollte, die nicht vorkommen. Welches ist der Zweck?
ponderstibbons
 
Beiträge: 2479
Registriert: Sa 1. Okt 2011, 17:20
Danke gegeben: 1
Danke bekommen: 256 mal in 255 Posts

Re: Probleme SPSS und Daten aus LimeSurvey

Beitragvon tiukas » Mo 25. Apr 2022, 15:05

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.
tiukas
 
Beiträge: 24
Registriert: Do 2. Mär 2017, 14:41
Danke gegeben: 1
Danke bekommen: 1 mal in 1 Post


Zurück zu SPSS Syntax

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

cron