Alfanumerieke ("character" of "string") variabelen in spss achtergrond



Dovnload 40.43 Kb.
Datum16.08.2016
Grootte40.43 Kb.
Alfanumerieke ("character" of "string") variabelen in SPSS

ACHTERGROND

Statistische pakketten als SPSS zijn niet goed geschikt voor niet-numerieke data. Als de gegevens niet uitdrukbaar zijn in getallen of cijfers dan wordt de verwer­king een stuk complexer. In elk geval moet tekstuele informatie op een speciale manier gedefinieerd worden en bestaan er binnen SPSS ook aparte hulpmiddelen om tekstuele informa­tie te kunnen modificeren of verwerken.

Onder een character of alfanumeriek teken verstaat men een willekeurig teken uit een van de volgende verzamelingen:

cijfers: 0 1 2 3 4 5 6 7 8 9

letters: a b c . . . z A B C . . . Z

spec. tekens: . , : ; ' " ( ) [ ] ! @ # $ % & * etc., incl. spatie (blank).

Onder een string verstaat men een reeks characters achter elkaar. SPSS onderscheidt long strings van maximaal 255 characters en short strings, waarvan de maximale lengte afhangt van het bedrijfssysteem (Windows 3.xx maximaal 8 characters). Long strings kennen geen missing values definitie en men kan ze ook niet op alle plaatsen in een programma gebruiken. In een SPSS-job kan men concrete strings opnemen door ze tussen aanhalingstekens (quotes of apostrophes) te plaatsen: 'Amsterdam', '1_A', "Man", "D'66". Breek bij voorkeur geen strings af, ga in de syntax-mode bijtijds naar een nieuwe regel. Let op dat het onderscheid tussen hoofdletters en kleine letters en het precieze aantal blanks van belang is: 'Jezus' is dus anders als 'je zus'.
Waarschuwing: het is niet zo dat SPSS vanzelf getallen numeriek opslaat en letters en speciale tekens als string hanteert. Het cijfer 1 kan bijvoorbeeld zowel als (numeriek) getal worden opgeslagen als door een characterstring van lengte een. De gebruiker moet tevoren aangeven of de betreffende variabele numeriek of alfanumeriek is. Alleen met numerieke variabelen kan gewoon gerekend worden; voor alfanumerieke variabelen zijn aparte bewerkingen opgenomen. Voor een alfanumerieke variabele moet de gebruiker vooraf de maximale lengte definiëren.
DATA DEFINITIE (DEFINIËREN VARIABELEN)
DATa LISt ... / varnames posities (A) ...

Input van ruwe data met alfanumerieke gegevens kan simpel verlopen door de toevoeging van "(A)" of Data Type "String" bij de variabele die dat betreft. SPSS weet vanaf

Define dat moment dat die variabele niet-numeriek is en uit hoe lang elke string maximaal

Variables kan zijn.

data list file='resp onse a' / resp 1-4 naam 6-30(a)

adres 32-50(a) pcod1 52-55 pcod2 56-57(a) wplts 59-72(a)

verzdat 73-80(adate) ontvdat 81-88(adate) herin 89.

In dit voorbeeld wordt van alle respondenten die een schriftelijke enquete toegestuurd hebben gekregen de naam, het adres, het tweede deel van de postcode en de woonplaats in strings vastgelegd, het respondentnummer, het eerste deel van de postcode, alsmede het wel of niet verzonden hebben van een herinneringsbrief wordt als gewone numerieke variabele gedefinieerd en de datums van verzending en ontvangst van de enqueteformulieren worden numerieke variabelen in het format 'mm/dd/yy'.


MISsing VALues varname ('string' ... ) .

Voor short strings kan men gewoon met het missing values commando aangeven welke string de betekenis heeft van onbekend. Men kan maximaal drie strings opgeven. Er is geen automatische onbekend-kode, dus niet zoiets als system-missing. Voor long strings bestaat er helemaal geen missing value mogelijk­heid.

missing values merknaam 'weet niet','999999999'.
VALue LABels varlist 'string' 'label' ... / ... .

ADD VALue LABels varlist 'string' 'label' ... / ... .

Alleen aan short string variabelen kan men value labels toekennen.



DATA MODIFICATIE (TRANSFORMATIES)

Om met bestaande string-variabelen te werken bevat SPSS aparte functies:



LOWer(arg) Zet alle hoofdletters uit arg om in kleine letters.

UPCase(arg) Zet alle kleine letters uit arg om in hoofdletters.

INDex(a1,a2) In welke positie van de string a1 komt de string a2 als eerste voor? Als a2 niet in a1 voorkomt dan krijgt het resultaat de waarde 0.

index('abcdefghijk','ef') geeft dus de waarde 5.



RINdex(a1,a2) Right Index. In welke positie van a1 komt de string a2 als laatste voor? Als a2 niet in a1 zit dan is het resultaat 0.

rindex('aap;noot;mies',';') geeft de waarde 9.



SUBstr(a1,a2,a3) Levert de substring van a1 die begint in positie a2 en een lengte heeft van a3 (default is tot het einde van a1).

substr('aap;noot;mies',1,3) wordt dus 'aap'.

Compute record = sub(record,10). Poetst de eerste negen tekens in record uit.

CONcat(arglist) Concateneren (d.i. achter elkaar plakken tot één string) van alle onderdelen uit arglist.

if (sex=1) aanhef=concat('De Heer ',naam).



LAG(varname,n) Geeft de score van de n-de case hiervóór op variabele varname.

lag(beroep,1) geeft het beroep van de vorige case.



LENgth(arg) Geeft de feitelijke lengte aan van een concrete string arg en de gedefinieerde lengte van arg als dit een variabele is.

Dus length(naam) zal in bovenstaand voorbeeld 25 opleveren en length('Jan de Wit') de waarde 10.



LPAd(a1,a2,a3) Left Pad. Vul de string a1 van voren op met alsmaar enkelvoudige characters a3 tot de lengte a2 is bereikt. Als a3 niet is opgegeven, wordt de blank gebruikt.

lpad('25,-',7,'=') levert dus de string '===25,-'.



RPAd(a1,a2,a3) Right Pad. Vul de string a1 van achteren op met enkelvoudige characters a3 tot de lengte a2 is bereikt. Ook hier wordt voor a3 de default-string ' ' gebruikt.

rpad(naam,25) zorgt ervoor dat voor elke case de string naam van achteren wordt aangevuld met blanks tot in totaal 25 tekens.



LTRim(a1,a2) Left Trim. Poets elk enkelvoudig teken a2 aan de linkerkant van a1 uit. Als a2 weg wordt gelaten worden de blanks aan het begin van de string a1 uitgepoetst.

ltrim('===25,-','=') levert de string '25,-' op.



RTRim(a1,a2) Right Trim. Poets de enkelvoudige tekens a2 aan de rechterkant van de string a1 uit. Default voor a2 is ' '.

rtrim('Ede ') geeft de compacte string 'Ede'.



NUMber(arg,format) Converteer de string arg naar het overeenkomstige numerieke getal volgens het aangegeven format. Als de string niet in een getal om te zetten is, dan is het resultaat system-missing (en een warning-boodschap).

number('1.5',f3.1) geeft het getal anderhalf.



STRing(arg,format) Converteer de numerieke arg met het format tot een string.

string(23,pct6.2) maakt het getal 23 tot de string '23.00%'

string(5,f4) geeft vier blanks voor het teken vijf ‘bbb5’

Let op: als het numerieke arg systemmissing is, geeft string(arg,f1) het teken ‘.’.



ANY(arg, arglist) Levert de numerieke waarde 1 op als de inhoud van arg voorkomt in arglist, anders de waarde 0.

if (any(plaats,'Amsterdam','Rotterdam','Utrecht')=1) size=7.


Nieuwe string-variabelen maken in een SPSS-job impliceert een lengte-definitie vooraf met w de gewenste maximale lengte (0
STRing varlist(Aw) / ... .

string aanhef(a33) /merk1 to merk7(a11). Geeft aan dat de variabelen aanhef en merk1 t/m merk7 nieuwe(!) variabelen zijn en een respectievelijke lengte hebben van maximaal 33 en 11 tekens.


Voorbeeld 1: vervangen van een komma binnen een string a door een punt.

If (index(a, ’,’)>0) a = concat( sub(a,1,index(a, ’,’)-1), ‘.’, sub(a,index(‘,’)+1)).


Voorbeeld 2: vervang in een stringvan maximaal 20 tekens alle tekens ‘e’ door het teken ‘E’.

if (sub(pattern,1,1)='e') pattern=concat('E',sub(pattern,2)).

do repeat pos=2 to 19.

if (sub(pattern,pos,1)='e') pattern=concat(sub(pattern,1,pos-1),'E',sub(pattern,pos+1)).

end repeat.

if (sub(pattern,20,1)='e') pattern=concat(sub(pattern,1,19),'E').

execute.
Voorbeeld 3: zoeken eerste nonblank character in record(a70) en die plaats opslaan in firstch.

Compute firstch=71.

Do repeat pos=1 to 70.

If (sub(record,pos,1) ne ‘ ‘) firstch=min(pos,firstch).

End repeat.
String variabelen kan men ook herkoderen:

RECode varlist ('string1','string2',...='newstring') ... INTO newv .

recode prov ('Groningen ','Friesland ','Drenthe '=1)

('Overijssel ','Gelderland ','Fle­voland '=2)

('Utrecht ','Noord-Holland','Zuid-Hol­land '=3)

('Zeeland ','Noord-Brabant','Limburg '=4) into regio.

value labels regio 1 'noord' 2 'oost' 3 'west' 4 'zuid'.

Maakt van de alfabetische variabele prov een numerieke vierdeling in regio.
Als strings toch (voor een groot deel) getallen bevatten, dan is de conversie naar rekenkundige gegevens het meest eenvoudig te doen met RECODE:

RECode varlist (CONvert) ... INTo newvarlist .

Met convert wordt automatisch geprobeerd de variabele(n) uit varlist zo veel mogelijk om te zetten in numerieke coderingen. De echte string velden kan men dan na (convert) nog extra opgeven.

recode vraag13 (convert) ('X'=10)('Y'=11) (else=99) into nv13.
SORTEREN

SORT CASES varlist .

Het bestand kan gesorteerd worden op een of meerdere variabelen. Achter elke variabele kan men met '(A)' of '(D)' opgeven dat voor die variabele oplopend (Aschending) of aflopend (Descending) gesorteerd moet worden.

De sorteervolgorde onder Windows 3.xx is als volgt: Eerst de spec. tekens in de volgorde: ' blank - ! " # $ % & ( ) * , . / : ; ? @ [ \ ] ^ _ { | } + < >, dan de cijfers 0 t/m 9 en tenslotte de letters in alfabetische volgorde: a A á à â ä Ä b ... e ë ... z Z

waarbij de alfabetische volgorde dus domineert boven het onderscheid tussen hoofdletters, kleine letters en eventuele leestekens.

Dus 'a' komt vóór 'A', '-1' komt vóór '-6' en '00' later dan ' 5'.
Er zijn drie functies die te maken hebben met de volgorde zoals Windows die standaard hanteert:

MIN(arglist) Geeft de eerste string uit arglist qua sorteervolgorde.

MAX(arglist) Geeft de string uit arglist die qua sorteervolgorde het laatste staat.

RANge(arg,arglist) Levert de numerieke waarde 1 op als de string arg qua sorteervolgorde binnen de reeks arglist hoort, anders de waarde 0. De arglist dient te bestaan uit een of meerdere paren van begin-eind reeksen.

range(substr(naam,1,1),'A','K','W','Z') geeft de waarde 1 als naam begint met een hoofdletter A t/m K of W t/m Z.


PROCEDURE

AUTorecode VARiables = varlist /INTo newvarlist /PRInt /DEScending .

Herkoderen van string variabelen (en numerieke variabelen) naar nieuwe numerieke variabelen met opeenvolgende geheeltallige kodes. Voor elke variabele uit 'varlist' worden alle voorkomende waarden gesorteerd en oplopend (default) danwel aflopend ('descending') doorgenummerd. Elke nieuwe variabele krijgt automatisch hetzelfde variable label en dezelfde value labels als de oorspronkelijke variabele. Als op de oorspronkelijke variabele geen value labels zijn gedefinieerd, dan worden automatisch de value labels gelijk genomen aan de strings of waarden van de oorspronkelijke variabele. Bij '/print' wordt het overzicht van de oude (max. 18 tekens) en nieuwe labels (max. 48 tekens) weergegeven.

data list / resp 1-3 hobby 5-40(a).

begin data.

001 voetbal

002 tekenen

003 dammen

004 voetbal

005 xxx

end data.



autorecode var=hobby /into hobbie /print.
TOEPASSING

Omdat numerieke variabelen in SPSS slechts maximaal 16 tekens precies zijn lukt het niet op een numerieke manier om meer dan 16 cijfers precies in beeld te krijgen. Hoe zou je bijvoorbeeld een frequentieverdeling van alle voorkomende patronen van 20 numerieke f1-variabelen kunnen maken? Via string-variabelen lukt het wel. Veronderstel dat item1 t/m item20 elk één numeriek teken (of systemmissing) bevat:

string sitem1 to sitem20(a1),pattern(a20).

do repeat item=item1 to item20 /sitem=sitem1 to sitem20.

do if sysmis(item).

+ compute sitem='.'.

else.

+ compute sitem=string(item,f1).



end if.

end repeat.

compute pattern=concat(sitem1 to sitem20).

fre var=pattern.



Theo van der Weegen,

RTOG, 27 januari 2006








De database wordt beschermd door het auteursrecht ©opleid.info 2019
stuur bericht

    Hoofdpagina