LesezeichenAbonnierenRSS-Feed abonnieren
Community_Help
SAS Employee

allo zusammen,

ich möchte ein Makro für jeden einzelnen Tag eines Jahres programmieren. Gibt es hier eine Möglichkeit, eine DO-Schleife für jeden Tag zu erzeugen OHNE mit datepart zu arbeiten?
Mit datepart wäre die Umsetzung ziemlich einfach - einfach do i=19359 to 19723. Wenn ich datepart in meinem nächsten SQL-Schritt nutze, dann funktioniert dieser allerdings leider nicht.
Mein Datum liegt in folgendem Format vor: '01jan2013:00:00:00'dt.
Hoffe, jemand von euch kann mir helfen - auch ohne dass ich ein reproduzierbares Beispiel schreibe.

proc sql;

create table neu as

select tab1.name, datum

from db.tabelle tab1

where datum = '01jan2013:00:00:00'dt;

quit;

<code>

1 ANTWORT 1
LainieH
Community Manager

Hallo SAS-Anfängerin,

die Funktion intnx liefert das nächste Intervall. Wenn Du als immer genau auf ...:00:00 prüfen musst wäre die Logik so:

%macro jedenTag(year);

  %local NDays i ThisDt ThisD;

  Data _NULL_;

   call symputx("ndays",intck("DAY", "01JAN&YEAR."d,"31DEC&YEAR."d) + 1 );

  run;

  %put Das Jahr &Year. hat &nDays. Tage;

  %let ThisDT = %sysfunc(Intnx(DTDAY,"01JAN&YEAR.:00:00"dt,0,same));

  %do i = 1 %to &NDays.;

   %let ThisD = %sysfunc(putN(&ThisDT.,DTDate9.));

   proc sql;

  create table neu_&ThisD. as

  select tab1.name, datum

  from db.tabelle tab1

  where datum = &ThisDT.;

   quit

   /* weiterer Code */

   %let ThisDT = %sysfunc(Intnx(DTDAY,&ThisDT.,1,same));

  %end;

%mend;

%jedenTag(2013);

Falls Du aber auch Zeiten abweichend von :00:00 hast und haben willst, würde ich folgenden Code nehmen:


%macro jedenTag(year);

  %local NDays i ThisD;

  Data _NULL_;

   call symputx("ndays",intck("DAY", "01JAN&YEAR."d,"31DEC&YEAR."d) + 1 );

  run;

  %put Das Jahr &Year. hat &nDays. Tage;

  %let ThisD = %sysfunc(Intnx(DAY,"01JAN&YEAR."d,0,same));

  %do i = 1 %to &NDays.;

   proc sql;

  create table neu_&ThisD. as

  select tab1.name, datum

  from db.tabelle tab1

  where datepart(datum) = &ThisD.;

   quit

   /* weiterer Code */

   %let ThisD = %eval(&ThisD. + 1);

  %end;

%mend;

%jedenTag(2013);

Viele Grüße

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
Diskussionsstatistiken
  • 1 Antwort
  • 1345 Aufrufe
  • 0 Kudos
  • 2 in Unterhaltung