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
New Contributor
Beiträge: 2
Zeit eines Datensatzes um 1h verschieben

Ich habe 2 .csv Datensätze mit jeweils einem Datum und Zeit in der ersten Spalte, die ich einlese und merge aber in einem Datensatz ist die Zeit um eine Stunde verschoben. Anstatt um 20:00 Uhr steht 19:00 Uhr aber in Wirklichkeit ist es 20 Uhr.

 

Ich glaube es liegt daran dass ich tagsekunde für beide Variablen gleich verwende...

bin Anfänger, kenn mich mit SAS nicht gut aus....

Hier ist der gesamte Code, es geht um Lärmdaten und Schlaf-Aktivitätsdaten, zuerst wird ein 10sek-Maximum der Lärmdaten genommen und dann geplottet mit den 10sek Aktivitätsdaten. Der erste plot überlagert die 2 Datensätze einfach für die ganze Zeitspanne, beim 2. ist es ein Mittelwert über die Woche. Habe den Code nicht selber geschrieben...

Ich versuchte zur Einheit tagsekunde einfach 3600 sek zu addieren aber dann hat sich einfach die Skala verschoben, aber die Daten nicht angepasst. weiss nicht wie ich die act variable zeitverschoben plotten kann... z.T. hat es noch Fehler drin, auch bei graphout das funktioniert so noch nicht..

hat jemand eine Idee wie das einfach gemacht werden könnte?? oder ist es nicht so einfach? wäre froh um Ideen...

 

dm'clear output';

dm'clear log';

options nocenter pagesize=77;

Title'SIAS';

DATA Act;

infile "D:\SIAS_Daten\248\B00309_2016-10-21_19-00-00.csv" delimiter=',' firstobs=2 lrecl=1900;

input date ANYDTDTM19. Act Light;

checkdate_time=put(Date,datetime.); *ANYDTDTM mit diesem Befehl kann man jedes Datum_Zeit Format lesen!!!;

tag=ceil(Date/86400);

tagsekunde=date-tag*86400;

tagsekunde=tagsekunde+3600; /*Korrekutur weil Zeit im Aktimetrifile eine Stunde zu früh angegegen wurden (19:00 anstatt 20:00)*/

hour=ceil(tagsekunde/3600); * in Sekunden: 3600=Stundensegment;

wochentag=weekday(tag);

monat=month(tag);

Jahr=year(tag);

woche=week(tag);

DATA Noise;

infile "D:\SIAS_Daten\248\E015_2016_10_21__11h05m35s.csv" delimiter=';' firstobs=4 lrecl=1900;

input date ANYDTDTM19. L_Max_A LEQ_A L_Min_A;

checkdate_time=put(Date,datetime.); *ANYDTDTM mit diesem Befehl kann man jedes Datum_Zeit Format lesen!!!;

tag=ceil(Date/86400);

tagsekunde=date-tag*86400;

hour=ceil(tagsekunde/3600); * in Sekunden: 3600=Stundensegment;

wochentag=weekday(tag);

monat=month(tag);

Jahr=year(tag);

woche=week(tag);

run;

 

DATA Noise_10; set noise;

date10=ceil(date/10);

date10=date10*10;

run;

Proc sort DATA=Noise_10; by date10;

Proc means DATA=noise_10 n mean stderr noprint;

var L_max_A LEQ_A L_min_A;

by date10;

output out=snoise_10 max=Lmax LEQA LminA;

run;

 

DATA snoise_10_b; set snoise_10;

rename date10=date;

run;

Proc sort DATA=Act; by date;

Proc sort DATA=sNoise_10_b; by date;

DATA Noise_Act; merge Act sNoise_10_b; by date;

DATA Noise_Act_out; set Noise_Act;

if act='.' then delete;

subj=248;

run;

 

Proc EXPORT DATA= WORK.Noise_Act_out

OUTFILE= "D:\OUTPUT\248_2016-10-21_19-00-00_noise_act.XLSx"

DBMS=EXCEL REPLACE;

Sheet="act_noise";

RUN;

Proc SORT DATA=Noise_Act_out; by tagsekunde;

Proc means DATA=noise_act_out n mean stderr noprint;

var Act LEQA;

by tagsekunde;

output out=tagnoise_act mean=mact MLEQA;

run;

 

Proc sort data=Noise_Act_out; by date;

GOPTIONS RESET=ALL DEVICE=png

GUNIT=CELL ROTATE=LANDSCAPE CBACK=white;

filename graphout 'D:\figures\w248.png';

goptions reset=all device=png gsfname=graphout;

 

PROC gplot DATA=Noise_Act_out;

plot (Act Lmax)*date / overlay frame vaxis=axis1 haxis=axis2

cv=white ch=white;

/*

axis1 c=black

length=10 cm

order=-1.5 to 1.5 by 0.5

value=(f=simple h=1.4);

/*

axis2 c=black

length=14 cm

order=0 to 100 by 5

value=(f=simple h=1.4);

*/

symbol1 i=join c=black v=none l=1 mode=include w=1;

symbol2 i=join c=red v=none l=1 mode=include w=1;

symbol3 i=join c=red v=dot l=1 mode=include w=1;

symbol4 i=join c=white v=circle l=1 mode=include w=1;

run;

 

GOPTIONS RESET=ALL DEVICE=png

GUNIT=CELL ROTATE=LANDSCAPE CBACK=white;

Proc sort data=tagNoise_Act; by tagsekunde;

filename graphout 'D:\figures\m248.png';

goptions reset=all device=png gsfname=graphout;

 

PROC gplot DATA=tagNoise_Act;

plot (mAct mLeqA)*tagsekunde/ overlay frame vaxis=axis1 haxis=axis2

cv=white ch=white;

/*

axis1 c=black

length=10 cm

order=-1.5 to 1.5 by 0.5

value=(f=simple h=1.4);

/*

axis2 c=black

length=14 cm

order=0 to 100 by 5

value=(f=simple h=1.4);

*/

symbol1 i=join c=black v=none l=1 mode=include w=1;

symbol2 i=join c=red v=none l=1 mode=include w=1;

symbol3 i=join c=red v=dot l=1 mode=include w=1;

symbol4 i=join c=white v=circle l=1 mode=include w=1;

run;

 

 

 

 

 

User
Beiträge: 1
Betreff: Zeit eines Datensatzes um 1h verschieben

Hi Cosmos,

 

um mit Daten und Zeiten zu rechnen verwenden wir immer die Funktion intnx. Die funktioniert mit Date und Datetime. Dann klappt es sekundengenau, auch mit dem 29. Februar. Um die Differenz zwischen zwei Daten oder Zeiten herauszufinden verwenden wir die Funktion intck.

 

data _null_;

infile cards;

format DATUM datetime20. TAG GESTERN date10. ZEIT VOR_EINER_STUNDE time.;

input DATUM anydtdtm19.;

TAG = datepart (DATUM);

GESTERN = intnx ('Day', TAG, -1);

ZEIT = timepart (DATUM);

VOR_EINER_STUNDE = intnx ('Hour', ZEIT, -1, 'Same');

put _all_;

cards;

01.10.2015 9:32

;

run;

 

Gruß

Benno

New Contributor
Beiträge: 2
Betreff: Zeit eines Datensatzes um 1h verschieben

Hoi Benno

danke für die Antwort. Nach einigem Herumprobieren hats jetzt mit der Funktion intnx funktioniert.