Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Occasional Contributor
Beiträge: 13
Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern

Hallo zusammen,

 

ich habe ein Problem, bei dem ich glaube, dass es keines sein sollte.

Ich möchte 2 Datasets, die von der Anzahl, Art und Benennung der Variablen identisch sind, mit einem Proc Compare auf inhaltliche Unterschiede vergleichen.

Das Problem dabei ist, dass fast alle Variablen das Format 1. haben. Ist nach dem Compare der Inhalt dieser Variablen beim Beobachtungstyp Dif gleich -1 ist das Format zu klein und im Log erscheint die Meldung "ERROR: Asterisks are an indication of a format width problem.". Deshalb wollte ich das Format für alle Variablen einfach vergrößern und zwar mit einem Format Statement im Data Step wie folgt:

DATA okt;
    format _numeric_ 5.;
    set studie2.atc_medigruppen_20151030;
RUN;

 

Leider funktioniert das nicht. Falls ich statt _numeric_ den expliziten Variablennamen ins Format Statement schreibe, funktioniert es. Aber da ich 246 dieser Variablen habe, suche ich nach einer einfacheren Lösung.

 

Kann mir jemand erklären, was das Problem ist und/oder wie ich zu einer Lösung komme?

 

Vielen Dank und viele Grüße

Barbara

 

Esteemed Advisor
Beiträge: 5.984
Re: Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern
[ Bearbeitet ]

_NUMERIC_ funktioniert im FORMAT nicht, das möchte eine Liste von Variablen.

Man kann aber alle numerischen Variablen so in eine Makrovariable packen:

proc sql;
select name into :spalten separated by ' '
from dictionary.columns
where libname = 'STUDIE2' and memname = 'ATC_MEDIGRUPPEN_20151030' and type = 'num';
quit;

und dann 

format &spalten 5.;

im DATA Step machen.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Occasional Contributor
Beiträge: 13
Re: Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern

Hallo Herr Bremser,

 

vielen Dank für die schnelle Antwort. Nach ein bisschen puzzeln, habe ich es hinbekommen, mein memname= 'ATC_MEDIGRUPPEN_20151030' hat er nämlich nicht gemocht (zu lang? Unterstriche?), aber so funktioniert's:

 

DATA okt;
    set studie2.atc_medigruppen_20151030;
RUN;

PROC SQL;
    select name into :spalten separated by ' '
    from dictionary.columns
    where libname = 'WORK' and memname = 'OKT' and type = 'num';
QUIT;

DATA okt2;
    format &spalten 5.;
    set work.okt;
RUN;

 

Vielen Dank nochmal.

Barbara

 

PS: Warum ich überhaupt auf das _numeric_ im Format Statement kam? Es wurde in diesem Beitrag im Forum empfohlen: https://communities.sas.com/kntur85557/attachments/kntur85557/code_sas/1448/1/1538_Format_auf_mehrer...

SAS Super FREQ
Beiträge: 620
Re: Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern

Um das Format einer Variable zu ändern muss die Datei nicht nocheinmal gelesen werden.

 

Dies kann man schneller mit Proc DATASETS machen.

 

Hier ein Beispiel:

 

data newClass;
  set sashelp.class;
run;

ods select variables;
proc contents data=newclass;
run;

proc datasets lib=work nolist;
  modify newClass;
  format _numeric_ roman.;
run;
quit;

ods select variables;
proc contents data=newclass;
run;

Bruno

Trusted Advisor
Beiträge: 1.114
Re: Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern

Das Problem in dem Datastep besteht lediglich darin, dass das FORMAT-Statement nach dem SET-Statement stehen muss, damit sich _numeric_ auf die Variablen in dem "gesetteten" Dataset beziehen kann.

Esteemed Advisor
Beiträge: 5.984
Re: Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern

Oh, Mann, da sag nochmal einer was von betriebsblind. Ja natürlich, das ist es.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Contributor
Beiträge: 21
Re: Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern

Hallo Barbara,

 

wenn es nur darum geht, bei Proc Compare die Formate zu ignorieren, kannst Du das Format-Statement auch in den Aufruf von Proc Compare einfügen und hier alle Format-Informationen für die (numerischen) Variablen entfernen.

Der erste Aufruf im Proc Compare wird auf die unterschiedlichen Formate hinweisen, beim zweiten Aufruf werden die Formate ignoriert, da mit "Format _numeric_;" alle Format-Informationen für den Lauf von Proc Compare ausgeblendet sind.

Dieses "Null-" Format-Statement ist immer mal wieder nützlich, wenn z.B. benutzerdefinierte Formate nicht gefunden werden...

 

Viele Grüße,

 

  Grischa

 

Data Work.Test;
  Set sashelp.class;
  Format _numeric_ roman10.;
Run;

Proc Compare base=sashelp.class compare=work.test;
Run;

Proc Compare base=sashelp.class compare=work.test;
  Format _numeric_ ;
Run;

Occasional Contributor
Beiträge: 13
Re: Versuch ein zu kleines Format mit einem Format Statement mit _numeric_ zu erweitern

Oh, Mann, jetzt habe ich glatt mehr gelernt, als ich ursprünglich wollte... Smiley (überglücklich)

 

Danke an alle.

Gruß Barbara