SAS Tutorial: Creating Categorieën met PROC FORMAAT
28 februari 2008 door: Blink 7 Bij het uitvoeren van data-analyse op een cohort bevolking, is het vaak wenselijk is om kenmerken categoriseren kan vele waarden. Leeftijd, inkomen en een creditcard te gast zijn voorbeelden van de bevolking van attributen die kunnen worden geplaatst in "bakken" en gemakkelijk geanalyseerd op basis van brede categorieën (zonder toevlucht te nemen tot lineaire of logistieke regressie). Hoewel variabelen snel kunnen worden gecodeerd met behulp van IF statements, SAS Formaat procedure biedt een meer elegante en draagbare oplossing.
Pre-requisites
- SAS patch run 9 of SAS Enterprise Guide 4.x
- Basiskennis van de SAS Data Step
- Basis kennis van hoe om te laden en uit te voeren SAS-programma's
- Basis kennis van hoe om te laden en opslaan SAS data sets
- Toegang tot lezen SAS / schrijven file space
Downloads
- Categorisatie project bestand (bijvoorbeeld alleen, bevat alle programma's)
- SAS Programma: CAT1
- SAS Programma: CAT2
- SAS Data Set: nameage (verplaats deze gegevens stellen om uw werk map)
Het scenario

De verstrekte gegevens set bevat basisinformatie over een willekeurige groep mensen. Kijkend naar de dataset, zijn er drie kolommen die de voornaam, achternaam en leeftijd van elke persoon. Stel dat een aantal prestatie-analyse zal worden uitgevoerd op de bevolking die - categoriseren door leeftijd kan nuttig zijn voor de veeleisende trends.
Neem 1 - Categorisatie met de IF-statement
Stel, u wilt de leeftijd categoriseren door 10's: 10-19, 20-29, 30-39 en 40 +. De ingevoerde gegevens kunnen worden geladen in de SAS DATA stap en uitgebreid met behulp van de IF-statement om een gecategoriseerde variabele te creëren. Concreet kunnen we het volgende doen:
- Maak een nieuwe dataset, met behulp van de verstrekte gegevens als de bron
- Maak een categorie variabele
- Categoriseer de leeftijd, het plaatsen van de resultaten in de categorie variabele
Open het SAS-programma cat1.sas (die met behulp van SAS Enterprise Guide 4 kan als alternatief in het Categorisatie project bestand en dubbelklik openen op de cat1 code het symbool van de SAS Project ontwerper venster).

Zoals u kunt zien in de screenshot hierboven, de code maakt een nieuwe dataset genaamd catv1 in het Werk bibliotheek.
- De standaard ingang is ingesteld op de nameage dataset die door deze tutorial
- Een 16-karakter variabele met de naam age_category wordt gemaakt om de letterlijke indeling van de variabele leeftijd houden
- Een IF / ELSEIF voorwaardelijke structuur wordt gebruikt om de emmer indeling voor de leeftijd van de deelnemer in elke record berekenen
Nadat de gegevens stap, is een PROC PRINT afgegeven om de output van de catv1

Uitvoeren van de cat1 code moet produceren output zoals hierboven
Take 2 - Categorisatie met aangepaste indelingen
Met behulp van IF / elsif verklaringen gemakkelijk kunnen worden en waarschijnlijk voldoende als je alleen maar een variabele ... wetende dat je nooit meer dezelfde indeling gebruiken in een ander stuk code of ooit gebruik maken van dezelfde indeling met verschillende variabelen te categoriseren. Als je niet kan garanderen deze voorwaarden dan wordt u vast in het kopiëren en plakken codering val. Elke "veranderingen" aan de categorisering zal moeten handmatig worden geconfigureerd voor elke variabele in elk stuk van de code - een tijdrovend en foutgevoelig proces.
Gelukkig SAS biedt de FORMAT procedure, die kan worden gebruikt om gecentraliseerde categoriseringen voor karakter of numerieke invoer te creëren. Voordelen van het gebruik van de FORMAT procedure omvatten het volgende:
- Formaten kunnen worden toegepast op een aantal variabelen in meerdere SAS-programma's
- Wijzigingen in de formaten worden toegepast op elke doelvariabele de volgende keer haar opdracht wordt uitgevoerd
- Flexibiliteit verankering van de indelingen in programma code of creëren in zelfstandige programma's
- Formaten kunnen worden opgeslagen in tijdelijke of permanente SAS bibliotheken
Met dat in gedachten, laten we herwerken deze code door de vervanging van de voorwaardelijke structuur met een FORMAAT procedure. Open het programma SAS cat2.sas om de code.

De FORMAAT procedure begint met een PROC FORMAT statement en eindigt met een RUN verklaring (hoofdlettergevoelig). Binnen deze structuur de VALUE verklaring kan worden gebruikt om een format te definiëren. Meerdere WAARDE verklaringen kunnen worden afgegeven binnen een FORMAAT procedure.
In dit geval hebben we vastgelegd in een formaat genaamd agecat. Dit formaat converteert numerieke invoer waarden in tekst-gebaseerde categorieën. (Opmerking: de tekst input waarden converteren, plaats een $ voor de naam formaat - $ agecat).
Single input waarden of reeksen van input waarden worden toegewezen formaat waarden via eenvoudige vergelijkingen. In dit geval, varieert van input-waarden (bv. 10-19) worden toegewezen op basis van een tekst, geformatteerde waarden.
Het zoekwoord hoge betekent de grootst mogelijke waarde in de dataset. Dit zoekwoord is in wezen een catch-all voor waarden boven de start van de reeks. Toegepast op deze gebruiker formaat, een input waarde boven de 40 zal worden toegewezen de opgemaakte waarde '40 + '. Ook kan het trefwoord laag worden gebruikt om de laagst mogelijke waarde vertegenwoordigen en gegevens kunnen worden gebruikt in een bottom-end catch-all categorie.
Onze door de gebruiker gedefinieerde formaat kan nu worden toegepast op alle numerieke variabele via de PUT verklaring. Als gevolg hiervan zijn de gegevens stap niet meer nodig ingewikkeld voorwaardelijke verklaringen en kunt toewijzen gecategoriseerd waarden age_category in een enkele lijn.
Gewoon om de flexibiliteit van de gebruiker te tonen gedefinieerde formaten, een nieuwe variabele genaamd age_in_5 werd ook gemaakt. Deze variabele laat zien welke leeftijd categorie elke persoon zal behoren tot 5 jaar vanaf nu. Merk op dat de opdracht verklaring identiek is aan age_category behalve dat 5 jaar is toegevoegd aan de leeftijd voor de opmaak.
Nadat de gegevens stap, is een PROC PRINT afgegeven om de output van de catv2

Uitvoeren van de CAT2 code moet produceren output zoals hierboven









thanks man
THANK YOU, echt goed en nuttig
Geweldig! Net wat ik zocht!