Werk & Studie alle pijlers

SPSS-vraagje

28-10-2011 17:13 36 berichten
Alle reacties Link kopieren
Normaal kan ik wel redelijk overweg met SPSS, maar nu heb ik eigenlijk geen idee of dit überhaupt wel mogelijk is.



Ik heb een dataverzameling. Per onafhankelijke variabele 1 en variabele 2 heb/wil ik minimaal 50 genummerde datapunten. Dus datapunt 1 heeft een waarde (voor variabele x, y, z), datapunt 2, datapunt 3. Elke van deze datapunten staan in een aparte rij en x, y, z in aparte kolommen. Nou hebben sommige combinaties van variabelen niet 50, maar minder datapunten. Wat ik zou willen is dat als er minder dan 50 datapunten zijn, bijvoorbeeld 45, datapunten 46-50 worden toegevoegd met standaardwaardes voor x, y, z. SPSS zou dus moeten kijken of elke combinatie van variabele 1 en 2 minder dan 50 punten heeft en zo ja, rijen toe moeten voegen met deze standaardwaarden.



Heeft iemand enig idee of dat mogelijk is? En zo ja, hoe dat kan? Het is een nogal grote dataset, dus handmatig toevoegen zou ontzettend lang duren. Het klinkt alsof het in ieder geval programmeerbaar zou moeten zijn, maar omdat ik geen held ben met scripten, hoop ik stiekem dat SPSS dit ook kan. Suggesties?
If at first you don’t succeed, call it version 1.0
Ik heb het!!



Even denken hoe op te schrijven.



Je begint met je bestaande set met missende punten. Ga daar data - transpose. Gooi alle zes variable onder variable(s). De getransponeerde file opslaan onder een nieuwe naam (hij verdwijnt bij mij (mac) bij de volgende stap als ik hem niet direct opsla). Doe nu hetzelfde voor je nieuwe set met standaardwaarden. Ook deze opslaan. Deze twee sets mergen (add variables) vanuit de getransponeerde dataset (met de waarden die behouden moeten blijven). De gemergede set weer terug transponeren et voila!



In mijn oefensetjes werkte dit... probeer het voor de zekerheid ook eerst even uit met een dummysetje. Oh... het was wel nodig om de string variable om te coderen in een numerieke variabele, ik hoop dat dat te doen is qua aantal mogelijke waarden van de string?
Alle reacties Link kopieren
quote:sabrina73 schreef op 28 oktober 2011 @ 19:04:

Kun je niet gewoon de missende waarden vullen met



recode x/y/z (sysmiss=0/waarde) .



ik zal nu wel iets heel stoms zeggen (ook aangezien ik niet weet wat datapunten zijn)Het probleem is dat de missing values niet als missing values in de dataset staan, maar dat de dataset van case 45 in combinatie 3 naar case 1 in combinatie 4 springt als er geen 46-50 in combinatie 3 zijn. Dus er moeten echt cases toegevoegd worden.
If at first you don’t succeed, call it version 1.0
bij het mergen geen gekeyde table oid aangeven trouwens.
ik denk dat matchen of mergen de enige oplossing is.



Een bestand maken met alle waarden geaggregeerd (keytable) en deze dan als tabel aan het tweede bestand hangen. Ik zou het wel kunnen doen maar ik kan het niet uitleggen ben ik bang.
Alle reacties Link kopieren
Oh ja, ik kan natuurlijk gewoon transponeren. Ja, dit zou moeten lukken. Er zijn 64 waardes in totaal. Ik denk alleen dat het een projectje wordt voor morgen...



Dank je!
If at first you don’t succeed, call it version 1.0
Alle reacties Link kopieren
quote:sabrina73 schreef op 28 oktober 2011 @ 19:14:

ik denk dat matchen of mergen de enige oplossing is.



Een bestand maken met alle waarden geaggregeerd (keytable) en deze dan als tabel aan het tweede bestand hangen. Ik zou het wel kunnen doen maar ik kan het niet uitleggen ben ik bang.Ja, het probleem daar was alleen dat er geen gebruik kan worden gemaakt van een keytable als er cases worden toegevoegd. Het bestand met geaggregeerde waarden heb ik. Had hem ook aan het bestand gehangen, maar ik wil alleen maar die cases (met standaardwaarden) die niet in het originele bestand stonden. Maar met transponeren los je het dan weer op. 't Is wel wat omslachtig.
If at first you don’t succeed, call it version 1.0
Alle reacties Link kopieren
quote:zeniiba schreef op 28 oktober 2011 @ 19:08:

bij het mergen geen gekeyde table oid aangeven trouwens.Dus "match cases on key variables in sorted files" niet aanklikken? Om te voorkomen dat de originele data overschreven wordt?
If at first you don’t succeed, call it version 1.0
transponeren?



In ieder geval is het opgelost.



Als je geen keyfile gebruikt dan zou ik wel je resultaten even goed controleren. Want als je bij var 1 meer cases met een sleutel en maar 1 case bij var 2 dan plakt hij het gewoon ergens aan vast. Ik vraag me af of hij de andere cases dan vult. Volgens mij heb je dan juist een table nodig.



Ik hoop dat je er uit komt!
ermm... je ziet het wel als je bij die stap bent. Bij het transponeren maakt spss een label (_lbl) variabele aan met daarin als values de namen van de oude variabelen. Doordat de originele variabelen nu cases zijn geworden (en iedere oorspronkelijke case een variabele met in iedere kolom zijn/haar waarden voor ieder van de oorspronkelijke variabelen die nu gelabeld zijn als cases in de _lbl variable) valt er niks te keyen.



Dat is niet duidelijk, he? Als gezegd: je ziet het wel wanneer je daar bent.



Laat maar horen als je er uit bent (of misschien toch nog niet...).
het is duidelijk heel erg vrijdag... sorry, wat ik zei is volstrekt geen oplossing voor je probleem. Mocht het nog komen, post ik uiteraard weer.
Denk dat dit dan uiteindelijk moet werken... (fingers crossed).

Feitelijk kan ieder van je cases geidenticeerd worden als een combinatie van var1 var2 en number (zo heten ze in mijn testsetjes). Probleem is alleen dat dat drie losse variabelen zijn. Door de waarden van var1, var2 en number te combineren in 1 variabele (combivar) kun je de twee sets die je nu hebt mergen terwijl je ze keyed op combivar.



Om de variabelen samen te voegen in combivar creeer je eerst een variabele combivar, wat een string variabele moet zijn met ook een flinke weidte, 8 (standaard) is niet genoeg, 20 bij mij wel maar allicht heb jij meer nodig omdat je hogere getallen gebruikt dan ik (terugbrengen weidte van de strinvariable var1 van 8 tot wat je werkelijk nodig hebt, helpt ook al).



Draai dan de volgende code om de waardes van de variabelen var1, var2 en number te concatenaten in combivar.



COMPUTE combivar=concat((var1), string(var2,f5.0), string(number,f5.0)).

EXECUTE.



Mocht je denken dat je info mist in de nieuwe value, verbreedt dan de combivar nog wat meer en draai de code opnieuw.



Doe dit voor je beide sets en dan mergen waarbij je keyed op combivar.



Denk dat dat 'm wel werkelijk is. Sorry voor de eerder chaos!

Dit is een oud topic. Het topic is daarom gesloten.
Maak een nieuw topic aan om verder praten over dit onderwerp.

Terug naar boven