Zoeken…


Invoering

Informats en formaten worden gebruikt om SAS te vertellen hoe de gegevens respectievelijk moeten worden gelezen en geschreven. Informats worden vaak gebruikt in een datastap bij het lezen van gegevens uit een extern bestand. Informats worden zelden gebruikt in PROC's. Formaten worden vaak gebruikt in zowel gegevensstappen als PROC's.

Opmerkingen

SAS-indelingen zetten numerieke of tekenwaarden om in tekenwaarden. Een opmaak kan worden toegepast met behulp van een format of put instructie, die de manier verandert waarop een waarde wordt weergegeven, of met behulp van de put functie om de opgemaakte waarde op te slaan in een nieuwe variabele.


Er zijn vier categorieën indelingen:

  • Karakter - instrueert SAS om karaktergegevenswaarden uit tekenvariabelen te schrijven.
  • Datum en tijd - instrueert SAS om gegevenswaarden te schrijven uit variabelen die datums, tijden en datetijden vertegenwoordigen.
  • ISO 8601 - instrueert SAS om datum-, tijd- en datetime-waarden te schrijven met behulp van de ISO 8601-norm.
  • Numeriek - geeft SAS opdracht numerieke gegevenswaarden te schrijven uit numerieke variabelen.

Formaten hebben meestal de vorm <formatname><w>.<d>; , waarbij w de breedte is (inclusief eventuele decimalen en het punt), waarbij d het aantal decimalen is.


Gangbare datumnotaties (toegepast op SAS-datumwaarden):

  • date9. bijv. 02AUG.2016
  • ddmmyyn8. bijv. 02082016
  • ddmmyy8. bijv. 02/08/16
  • yymmdd10. bijv. 20160802
  • year4. bijv. 2016

Algemene numerieke notaties (toegepast op getallen):

  • comma11.0 bijv. 1.234.567
  • comma12.2 bijv. 1.234.567,00
  • dollar11.2 bijv. $ 5.789.12
  • nlmnlgbp11.2 bijv. £ 2.468,02

Andere formaten:

  • $hex8. , converteer string naar hex
  • $upcase. , tekenreeks omzetten in hoofdletters
  • $quote. , plaats een string tussen aanhalingstekens

Een volledige lijst met indelingen vindt u hier> https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001263753.htm

Met behulp van de opmaakverklaring

De format past de gegeven opmaak alleen op de opgegeven variabele toe voor weergavedoeleinden , dwz de onderliggende waarde verandert niet.

data example1 ;
  Date  = '02AUG2016'd ; /* stored as a SAS date, i.e. a number */
  Date2 = '31AUG2016'd ;
  format Date monyy7. Date2 yymmddn8. ;
run ;
Datum date2
AUG2016 20160831

De format-opdracht gebruiken om gegevens te groeperen

U kunt indelingen binnen een procedure toepassen, bijvoorbeeld om de groeperingen binnen een proc summary of proc freq .


SAS-datums groeperen

data example2 ;
  do Date = '01JUN2016'dt to '31AUG2016'dt ;
    Days = 1 ;
    output ;
  end ;
run ;

/* Summarise by year & month */
proc summary data=example2 nway ;
  class Date ;
  var Days ;
  output out=example2_sum (drop=_TYPE_ _FREQ_) sum= ;
  format Date yymmn6. ; /* e.g. 201606 */
run ;
Datum dagen
201.606 30
201607 31
201.608 31
/* Summarise by month & year */
proc summary data=example2 nway ;
  class Date ;
  var Days ;
  output out=example2_sum2 (drop=_TYPE_ _FREQ_) sum= ;
  format Date monyy7. ; /* e.g. JUN2016 */
run ;
Datum dagen
JUN2016 30
JUL2016 31
AUG2016 31

Het voordeel van het gebruik van een indeling is dat de natuurlijke sorteervolgorde behouden blijft.


sashelp.class met sashelp.class als voorbeeld dat u de frequentie van de eerste letter van elke naam wilt vergelijken. U kunt de functie substr() gebruiken om de eerste letter te vinden en een proc freq op de nieuwe variabele. Als alternatief kunt u de $1. toepassen $1. formaat naar de variabele Name :

proc freq data=sashelp.class ;
  table Name ;
  format Name $1. ;
run ;
Naam COUNT
EEN 7
B 4
C 2
enz.

Aangepaste formaten

Aangepaste indelingen, ook wel door de gebruiker gedefinieerde indelingen genoemd, kunnen worden gemaakt en gebruikt zoals elke andere standaardindeling.

/*Create new character format for state variables*/
PROC FORMAT;
VALUE $statef      'CA' = 'California'
                   'MA' = 'Massachusetts'
                   'NY' = 'New York';

/*Once created, you can use your custom format in PROC and DATA steps*/
PROC PRINT DATA=table;
FORMAT state-var $statef.;
RUN;

De variabele state-var wordt afgedrukt volgens het nieuwe formaat. De waarde 'CA' wordt bijvoorbeeld afgedrukt als 'California' . Als een waarde niet is opgemaakt, zoals 'CT' , wordt die waarde afgedrukt zoals deze in de gegevensset wordt weergegeven.

Informats gebruiken om gegevens te lezen

Informats worden gebruikt om SAS te vertellen hoe de gegevens moeten worden ingelezen en worden geïdentificeerd met een informat .

data test;
 infile test.csv;
 informat     id $6.
              date mmddyy10.
              cost comma10.2
 ;
 input @1 id
       @7 date
       @20 cost
 ;
run; 

Informats en indelingen kunnen ook samen worden gebruikt om de gegevens in te lezen en uit te schrijven in een ander formaat, zoals met de onderstaande salarisvariabele:

DATA workers;
  informat first last $16.;
  informat salary 12.1;
  informat birthdate 8.;
  input 
    first $ 
    last $ 
    birthdate 
    salary;
  format salary dollar10.;
datalines;
John Smith 19810505 54998.5
Jane Doe 19950925 45884.5
Frank James 19600222 70000.5
Jamie Love 19630530 292000.5
;
run;


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow