SAS Tutorial: Loading tabs gescheiden bestanden
25 januari 2008 door: Blink 7
Stel je krijgt een lijst van grote Canadese politieke donateurs en wensen te laden in SAS voor verdere analyse. De lijst is in een tekstbestand met velden gescheiden door tabs. SAS Enterprise Guide (EG) biedt wizards om automatisch importeren van een verscheidenheid aan bestandsformaten, maar het gebruik van deze GUI's onderbreken en de kans voor automatisering of aanvullende behandeling tijdens het importeren. Gebruik van de code om gegevens laden biedt een aantal voordelen:
- Mogelijkheid om gegevens doorsturen naar meerdere datasets
- Mogelijkheid te reinigen en gegevens te wijzigen tijdens de laadtijd
- Mogelijkheid tot het verwijderen ongewenste gegevens
- Draagbaarheid en herbruikbaarheid
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
- Basiskennis van numerieke en tekenopmaak
- Toegang tot lezen SAS / schrijven file space
Downloads
- Tab project bestand (bijvoorbeeld alleen, bevat alle programma's)
- SAS Programma: Tab1
- SAS Programma: tab2
- SAS Programma: tab3
- SAS Programma: tab4
- SAS Programma: tab5
- Donor List (tab-bestand)
Neem 1: Basis Loader
Open het SAS-programma tab1.sas (die met behulp van SAS Enterprise Guide 4 kan als alternatief in het LoadTabDelimit project bestand en dubbelklik openen op de Tab1 code het symbool van de SAS Project ontwerper venster).

Zoals u kunt zien in de screenshot hierboven, SAS leest de tekst bestanden met behulp van de Data stap. Een minimum van twee verklaringen zijn nodig om goed te laden van een tekstbestand:
- INFILE - De infile verklaring geeft het tekstbestand worden geladen. Het volledige pad kan gespecificeerd worden (zoals in dit voorbeeld) of een pad ten opzichte van de standaard SAS document directory kan worden gebruikt.
- INPUT - De input verklaring specificeert de velden die moeten worden gelezen uit het tekstbestand en hoe ze moeten worden gelezen.
Eerst gaan we kijken naar de INFILE verklaring. Om dit voorbeeld werk dat u zal waarschijnlijk om het pad te wijzigen van "r: \ namelist.txt 'om de locatie van de tab-gescheiden bestand. Er zijn ook twee opties opgenomen in de INFILE verklaring:
- DLM - De DLM optie kan de gebruiker het scheidingsteken tussen de velden in een bestand. In dit geval hebben we aangegeven '09 'x als scheidingsteken, dat is de zeshoek vertegenwoordiging van het tabblad karakter. Andere vaak voorkomende begrenzers zijn de komma en de ruimte. Scheidingstekens moet worden gespecificeerd in enkele aanhalingstekens. Als het DLM optie niet is opgenomen, SAS neemt het scheidingsteken is een enkele spatie
- DSD - De DSD optie instrueert de DATA stap naar opeenvolgende scheidingstekens te behandelen als een lege waarde voor de huidige variabele. Zonder deze optie zou SAS gewoon naar het volgende item van veldgegevens en lees het in het huidige stap variabele gegevens, die zou kunnen leiden tot het dossier misalign om de gegevens variabelen en de belasting onjuist. DSD verwijdert ook omliggende aanvragen bij het lezen van gegevens uit tekstbestanden.
Vervolgens gaan we kijken naar de INPUT verklaring. Variabele namen zijn gemaakt om elk van de velden winkel te lezen sequentieel in de dataset. Er zijn verschillende varianten van de INPUT syntaxis. De syntax in dit voorbeeld geeft precies hoe elke variabele moet worden gelezen. Voor nu, is de code instrueren SAS om te lezen alle gegevens in tekstvelden die een maximaal 16 tekens lang zijn ($ 16.). Er zijn veel alternatieve manieren om deze gebieden te lezen, waarvan sommige later zullen worden gedekt.

Uitvoeren van de Tab1 code moet resulteren in een dataset identiek aan de screenshot hierboven.
Take 2: Updaten van de Data Types
Tab1 geladen alle velden als 16 karakters tekst, maar dat is niet geschikt kan zijn voor zuiver numerieke velden. Ten eerste, stel dat je wilt filteren uit mensen die jonger zijn dan 18 (zoals we later zullen doen). Als de leeftijd nog in karakter-formaat, kunt u filteren op mensen in de leeftijd 10-17, maar niet de leeftijdscategorie van 2-9, aangezien de cijfers 2, 3, 4, ..., 9 een grotere ASCII-waarde hebben dan de nummer 1 in 18. Je kon het probleem verhelpen door het omzetten van het tekstveld om numerieke voor het uitvoeren van numerieke vergelijkingen, maar het is net zo gemakkelijk naar het veld direct ingelezen in een numerieke variabele.
Ten tweede kan iemand de verleiding komen om de partij aansluiting als "Conservatieve Partij van Canada lijst" in plaats van gewoon "conservatief". De partij lange vorm naam is 25 tekens lang en zal worden afgebroken als ingelezen in een 16-karakter variabele.

Om deze problemen oplossen, wijzigt u de leeftijd van variabele data te lezen als een 3-cijferig nummer (3.) En verander de partij variabele data te lezen als een 32-karakter variabele ($ 32.).

Start tab2 code. De leeftijd kolomkop moet bevatten nu een cirkelvormige blauwe symbool, terwijl de leeftijd kolom gegevens is rechts uitgelijnd. Dit geeft aan dat de kolom bevat numerieke gegevens.
Neem 3: Verwijderen van de titel Line
Inkomende tekstbestanden vaak de veldnamen bevatten in de eerste lijn. Dit is onnodig, omdat de variabele namen zijn gedefinieerd binnen de INPUT verklaring van de DATA stap. Standaard wordt de eerste regel gelezen als gegevens, die ongewenst is. Er zijn verschillende soorten van de logica die kunnen worden gebruikt om de titel lijnen te verwijderen, maar als u zeker weet dat de titel lijn zal altijd op de eerste lijn (dus geen lege header lijnen) dan is de eenvoudigste aanpak is gewoon niet de eerste lijn naar de uitgang . Dit kan worden bereikt met behulp van _N_, input SAS record tegen te gaan. Wanneer _N_ = 1, worden de gegevens niet worden uitgevoerd om de definitieve gegevens.

Een subsetting if-statement werd gebruikt om de waarde van _N_ test. Deze verklaring neemt de algemene vorm
IF
Als de voorwaarde evalueert tot valse, het DATA stapprogramma stroom keert terug naar de top, zonder de uitvoering van een van de code onder de subsetting als. In dit geval is de subsetting als verklaring zal beoordelen op waar alleen als de input record is meer dan een, wat betekent dat de uitgang van de impliciete verklaring zal alleen worden geactiveerd wanneer de record wordt gelezen is NIET het eerste record in de input.

Voer de code tab3 en ervoor zorgen dat de output niet bevat de header namen (zie boven).
Neem 4: Het verwijderen van slechte data
Uiteindelijk zal een SAS-programmeur ontmoeting twee soorten ongewenste gegevens:
- Gegevens die kunnen worden gered of op zijn minst moet worden gemarkeerd
- Gegevens die absoluut nutteloos is en kan worden weggegooid
Algemeen, de laatste categorie moet worden geminimaliseerd tot bijna nul, want er zijn enkele gevallen waarin junking gegevens zonder nadere analyse geen invloed op het uiteindelijke product. Maar laten we veronderstellen, voor deze oefening, dat de donatie informatie is gewoon niet bruikbaar tenzij het zowel een voor-en achternaam bevat. De tab3 uitgang bevat een inwoner van Montreal met de achternaam "Smith", maar geen begeleidend voornaam. We kunnen ontdoen van dit record en elke opnemen zoals het door het combineren van voorwaardelijke logica met de commando's LENGTHN en Verwijderen.

LENGTHN geeft het aantal niet-blanco tekens in een string. Als de LENGTHN vergelijking evalueert tot nul kunnen we ervan verzekerd zijn dat het veld dat wordt beoordeeld is ofwel nul of bestaat uit lege tekens. Het DELETE commando voorkomt dat de huidige record wordt opgesteld om de uitvoer van gegevens.

Start tab4 code en ervoor zorgen dat de output record bevat zeven records. Geen van records moeten bevatten blanco eerste of laatste namen (zie boven)
Take 5: Filteren van gegevens
Ten slotte moeten we bedenken een manier om te gaan met gegevens die niet helemaal bruikbaar, maar kan eventueel worden gecorrigeerd. Kijkend naar onze gegevens, is het onwaarschijnlijk dat een minderjarige zou een zware financiƫle bijdrage voor een bepaalde partij te worden, terwijl het net zo onwaarschijnlijk is dat iemand 120 jaar oud overtreffen. Voor nu kan het beste te scheiden dergelijke records uit de andere gegevens voor verdere evaluatie. Gelukkig, SAS maakt het eenvoudig doordat verwerkte gegevens worden doorgestuurd naar de uitgang van meerdere datasets. De volgende wijzigingen moeten worden aangebracht in de tab4 code
- De opening gegevens verklaring moet opgeven meerdere data sets, een voor schone data en een voor de gegevens die moet worden onderzocht
- De OUTPUT-commando moet expliciet worden gedefinieerd. Verwerkte gegevens moet worden gericht aan een van de gegevens op basis van enige voorwaarde die zal bepalen of de gegevens vereist nader onderzoek

Zie de screenshot hierboven. Op de top van de code, het DATA verklaring definieert nu twee datasets:
- tab_v5 slaat records die geen wijzigingen vereisen
- tab_v5_reject slaat de administratie van de eisen nader onderzoek
Kijk nu naar de onderkant van de code. Er zijn twee expliciete OUTPUT opdrachten, telkens gevolgd door de naam van de dataset. De gegevens worden weggeschreven naar tab_v5 indien de leeftijd van de persoon in het record ligt tussen de 18 en 120. Anders zullen de gegevens worden weggeschreven naar tab_v5_reject. Uitvoering van beide OUTPUT verklaring gaat ervan uit dat het record niet reeds is verwijderd via de logica toegevoegd in tab4.


Start tab5 code. Twee gegevens moeten worden geproduceerd - een daarin 6 records met leeftijden binnen het bereik 18-120 en de andere met een record met een leeftijd buiten dit bereik.
Er zijn computers software en demo's voor statistische analyse. Voor SAS software-informatie en tutorials, krijgen de hulp boek online. De Microsoft Office-software bevat statistische analyse in Excel, maar deze software doet wonderen. Als je gaat winkelen voor software, pick-up antivirus firewall-software. Het antivirus dat al het laatste virus definities web heeft, is Norton AntiVirus. In telefoon vandaag ontwikkeling, is het een must om te investeren in een internet telefoon toestel.








