/* Program 1: how to transfer Date, Time in character format to date/time format? */ data test; date='05/04/00'; time='10:05'; run; data new; set test; sasdate1=input(date, mmddyy8.); sasdate2=sasdate1; sastime1=input(time, time5.); sastime2=sastime1; datetim1=input(put(sasdate1,date7.)||':'||time,datetime16.); datetim2=datetim1; ** created sasdate2, sastime2, datetim2 for display purposes only **; run; proc print data=new; var sasdate1 sasdate2 sastime1 sastime2 datetim1 datetim2; format sasdate2 mmddyy8. sastime2 hhmm5. datetim2 datetime16.; run; /* How to deal with time variable in SAS/Graph? */ data one; input startime time5. count; if startime gt '12:00't then date='30sep92'd; else date='01oct92'd; datetime=dhms(date,hour(startime),minute(startime), second(startime)); cards; 16:00 12.3 17:00 5.7 18:00 8.6 19:00 9.0 20:00 15.7 21:00 10.5 22:00 8.1 23:00 1.5 0:00 11.3 1:00 6.6 2:00 3.5 3:00 7.6 4:00 2.4 5:00 13.8 6:00 14.0 7:00 4.9 8:00 5.0 run; proc print; var startime datetime; run; proc gplot data=one; plot count*datetime / haxis='30sep92:16:00'dt to '01oct92:08:00'dt by hour2; format datetime tod5.; run;
Tuesday, September 10, 2013
Dealing SAS Date/time
How to change all derived variables to upper case?
/************************************************************************* *If you ever need to change the derived variables name from lower case to upper case, there is a SAS option that you can use to take care of that instead of retyping them one by one. Here's the option: *************************************************************************/
options validvarname=upcase;
Rest.sas to set correct formchar for PC/Windows Format
This was quite useful before the ODS was introduced.
/**************************************************************/ /* SAS Programming Tips */ /* Author: Chunqin Deng */ /*Program File: reset.sas */ /* Date: June 25, 1999 */ /* Purpose: put the reset.sas file in the beginning of */ /* each program. It will balance the unbalanced */ /* quotation mark and set correct formchar for */ /* PC/Windows Format. Formchar option will */ /* prevent to create a string character when you */ /* paste the SAS output to other work */ /* editor software */ /**************************************************************/ *'; /* Balance the unbalanced single quotation mark */ *"; /* Balance the unbalanced double quotation mark */ run; title; /* Delete the existing title definition */ footnote; options nocenter; options nomprint nomlogic nosymbolgen; options notes nodate nonumber ls=195 ps=55 obs=max; options formchar='|----|+|---+=|-/\*'; /* For PC/Windows Platform */ goptions reset=all; ========================================= data try; do i=1 to 2; do j=1 to 2; input x@@; output; end; end; datalines; 23 34 12 56 ; run; proc freq; tables i*j/chisq; run;
Create a calendar using SAS PROC REPORT
This collection is from SAS website at http://support.sas.com/kb/50/099.html
The sample code below contains two sections. The top section creates a calendar that contains only the dates. The bottom section creates a calendar that includes text within date cells.
The sample code below contains two sections. The top section creates a calendar that contains only the dates. The bottom section creates a calendar that includes text within date cells.
proc format;
value dow
1='Sun' 2='Mon' 3='Tue' 4='Wed' 5='Thu' 6='Fri' 7='Sat'
;
run;
%let year=2013;
%let beg_yr=%sysfunc(mdy(1,1,&year));
%let end_yr=%sysfunc(mdy(12,31,&year));
/************* Monthly calendar *************/
/* Create a data set containg one observation for each day in
the time period specified above. */
data calendar_&year;
format date mmddyy8. dow dow.;
do date=&beg_yr to &end_yr;
monthNum = month(date);
year = year(date);
dow = weekday(date);
monthname = strip(upcase(put(date,monname9.)))||' '||put(year(date),z4.);
dom = input(put(date,day2.), 2.);
week = intnx('week',date,0,'e');
output;
end;
run;
/* Create a week number. */
data calendar_&year;
set calendar_&year;
by monthnum week;
if first.monthnum then weeknum=0;
if first.week then weeknum+1;
run;
options missing='' nobyline;
ods escapechar="^";
/* Create calendar output that contains only dates. */
title "&year";
proc report data=calendar_&year center nowd
style(report)=[font=(Arial, 8pt)]
style(column)=[font=(Arial, 8pt) cellheight=.5in cellwidth=.5in]
style(header)=[font=(Arial, 8pt) font_weight=bold]
split='*';
by monthnum;
columns weeknum monthnum, (dow, dom);
define weeknum / group order=internal noprint;
define monthnum / across '' center order=data format=nlstrmon.;
define dow / across order=data '' center preloadfmt format=dow.;
define dom / analysis '' left;
run;
/************* Monthly calendar with holidays and notes *************/
/* Create a data set containg one observation for each day in
the time period specified above. */
data calendar_&year(drop=fdoy);
format date mmddyy8. dow dow.;
do date=&beg_yr to &end_yr;
monthnum = month(date);
year = year(date);
dow = weekday(date);
monthname = strip(upcase(put(date,monname9.)))||' '||put(year(date),z4.);
dom = input(put(date,day2.), 2.);
week = intnx('week',date,0,'e');
/* Get holidays */
fdoy=mdy(1,1,&year);
length note $100;
note = ' ';
if date = mdy(1,1,&year)
then note = "New Year's Day";
if date = intnx('week.2',fdoy,(weekday(fdoy) ne 2)+2)
then note = "Martin Luther King Day";
else if date = intnx('week.2',intnx('month',fdoy,1),(weekday(intnx('month',fdoy,1)) ne 2)+2)
then note = "President's Day";
else if date = intnx('week.2',intnx('month',fdoy,4),(weekday(intnx('month',fdoy,4)) in (1,7))+4)
then note = "Memorial Day";
else if date = mdy(7,4,&year)
then note = "Independence Day";
else if date = intnx('week.2',intnx('month',fdoy,8),(weekday(intnx('month',fdoy,8)) ne 2))
then note = "Labor Day";
else if date = intnx('week.2',intnx('month',fdoy,9),(weekday(intnx('month',fdoy,9)) ne 2)+1)
then note = "Columbus Day";
else if date = mdy(11,11,&year)
then note = "Veteran's Day";
else if date = intnx('week.5',intnx('month',fdoy,10),(weekday(intnx('month',fdoy,10)) ne 5)+3)
then note = "Thanksgiving Day";
else if date = mdy(12,25,&year)
then note = "Christmas Day";
output;
end;
run;
/* Create notes for personal dates. */
data mydates;
length note $100;
date = mdy(1,20,&year); note = "Mom's B-day"; output;
date = mdy(5,25,&year); note = "^{style [foreground=blue] GRADUATION!}"; output;
date = mdy(8,21,&year); note = "^{style [foreground=red] First Day of School}"; output;
run;
/* Merge the two date data sets together. */
data calendar_&year;
merge calendar_&year mydates;
by date;
/* Append note text to the day of month value */
length dom_notes $200;
dom_notes = put(dom,8.) || "^n" || note;
run;
/* Create a week number. */
data calendar_&year;
set calendar_&year;
by monthnum week;
if first.monthnum then weeknum=0;
if first.week then weeknum+1;
run;
/* Transpose the data for the calendar with notes. */
proc transpose data=calendar_&year out=notes_calendar_&year;
by monthnum monthname weeknum;
id dow;
var dom_notes;
run;
/* Create a calendar with dates and notes. */
title "#byval(monthnum) &year";
proc report data=notes_calendar_&year center nowd
style(report)=[font=(Arial, 8pt)]
style(column)=[font=(Arial, 8pt) cellheight=1in cellwidth=1in]
style(header)=[font=(Arial, 8pt) font_weight=bold]
split='*';
by monthnum;
format monthnum nlstrmon.;
columns weeknum Sun Mon Tue Wed Thu Fri Sat;
define weeknum / group order=internal noprint;
run;
Subscribe to:
Posts (Atom)