Hello all,
I just discovered that I have a relatively large data set that was incorrectly converted from yymmdd to
DATETIME20.
Dates still kick my hinny after a year of working with sas but in any case any date that matches this needs to have the century changed from 19 to 20
data data.COMBOx;
set combo2;
if (year(orig_hire) < year(birth_date)) and (year > 1999) then orig_hire=
/* year(orig_hire)+100 month(orig_hire) date(orig_hire) etc*/
run;
I know how to parse it, I get mixed up when puting it bad together. help please. TIA.
Rather than year, try DTYEAR to specify you're working with a date time.
Can you post some sample data please.
In general you could just use INTNX and increment it 100 years.
Oh I had not see that function before, cool. Let me try it before going down the sample data path. Thank you.
proc print data=combo2 (obs=10) noobs n;
var orig_hire birth_date year;
/*where year(orig_hire) < year(birth_date) and year > '1999';*/
where orig_hire < birth_date and year > '1999';
run;
orig_hire birth_date year
05SEP1900:00:00:00 05JAN1957:00:00:00 2000
10JUL1900:00:00:00 05MAY1970:00:00:00 2000
16AUG1900:00:00:00 28JUN1969:00:00:00 2000
01JAN1900:00:00:00 01APR1960:00:00:00 2000
16AUG1900:00:00:00 11FEB1957:00:00:00 2000
01MAY1900:00:00:00 19AUG1967:00:00:00 2000
01SEP1900:00:00:00 27AUG1954:00:00:00 2000
01SEP1900:00:00:00 27AUG1954:00:00:00 2000
01MAR1900:00:00:00 25FEB1951:00:00:00 2000
16AUG1900:00:00:00 04MAR1971:00:00:00 2000
N = 10
my code:
data data.COMBOx;
set combo2;
/* example x=intnx('week', '17oct03'd, 6);*/
if (year(orig_hire) < year(birth_date)) and (year > 1999) then orig_hire=intnx('year', orig_hire, 100, 'S');
run;
Should this work? It is bombing out. The date is already stored as DATETIME20. TIA.
Rather than year, try DTYEAR to specify you're working with a date time.
I am getting hudreds of these notes then it dies. "this is the internal date"? I am giving it the field name 'orig_hire'. I tried adding datetime20. no go...:
NOTE: Invalid argument to function INTNX('year',-1873756800,100,'S') at line 1599 column 60.
WARNING: Limit set by ERRORS= option reached. Further errors of this type will not be printed.
AGE_0815=32 WSU_ID_Mfix= PSN_NO_Mfix= AREA_NAME=PROVOST, OFFICE OF EEO=2 SFILE=ALL_00.DBF STRM=2007 TITLE=INSTRUCTOR WORK_LOCN=PUL WSUID=09993982 TITLE_SHRT= year=2000 WSU_ID=9993982 EMPSTATRSN=00 PRIMEMPTYP=F FULL_PART=P PERM_TEMP=T SEX=M OFF_CAMPUS=
HOME_DEPT=8324 WORK_COUTY=0038 RET_PLAN= SEIB_ELIG= ETHNIC=50 TENURE_IND=N CITIZENSHP=US MILITARY=K HANDICAP= TENURE_STA=N TENURE_YR=0000 HIGHDEG_CD=08 HIGHDEG_YR=93 PSN_NO=077281 ACTIVE_IND=Y PAY_AFFT=Y LEAVE_IND=N PAYRATE_CD=M HEPB_STAT=7 TIMERPT_CD=E
TERM=9.0000 PAYRATE=833.330 FTE=25.00000 FULLTM_RTE=3333.33 JOB_CLASS=000260 STEP= PID_MO=00 APPT_DEPT=8324 LEAVE_RSN= SAL_VAR= RANGE= SAL_REV_AR= CLASS_TYPE=F APPT_WK_PD= NAME=SMITH,WILLIAM LELAND EMPL_STAT=A JOBGROUP=21 ANNUAL_9B=29999.97
ANNUAL_12B=. ANNUAL=29999.97 AREA=01 OFMGROUP=03 DEPT_NAME=GENERAL EDUCATION HOME_AREA=01 OFM_GROUP= OFM_CLASS= TOTALIFFTE=. AREANAMEN= orig_hireC6= home_deptnum=. job_classnum=. apptdeptname_off= areaname= home_deptname_off= PSN_NO_ORIG=.
SAL_RANGE= OFM= campus=Pullman WSUID_F= WSUID_Mfix= record_nbr=1 HOME_AREA_DESCR=PROVOST, OFFICE OF HOME_DEPT_DESCR=GENERAL EDUCATION annual_new=29999.97 annual_12b_new=39999.96 annual_9b_new=29999.97 emp_pri_ind=0 emp_nex_ind=1 C_emp_pri_ind=0
C_emp_nex_ind=0 E_emp_pri_ind=0 E_emp_nex_ind=0 F_emp_pri_ind=0 F_emp_nex_ind=1 G_emp_pri_ind=0 G_emp_nex_ind=0 end_date=15MAY1901:00:00:00 enddate=15MAY2001:00:00:00 end_datec6=. birth_date=27SEP1967:00:00:00 statdate=16AUG1994:00:00:00 retn_date=.
prob_date=. cont_empl=16AUG1900:00:00:00 orig_hire=. prob_datec6=. retn_datec6=. retdate_c8=. statdatec6=. snapshot_date=. begin_date=16AUG2000:00:00:00 cont_emplC6=. totalfte=25 sum_allfte=25 _ERROR_=1 _N_=58713
NOTE: Missing values were generated as a result of performing an operation on missing values.
Each place is given by: (Number of times) at (Line):(Column).
22 at 1599:60
NOTE: Mathematical operations could not be performed at the following places. The results of the operations have been set to missing values.
Each place is given by: (Number of times) at (Line):(Column).
126773 at 1599:60
NOTE: There were 298416 observations read from the data set WORK.COMBO2.
NOTE: The data set DATA.COMBOX has 298416 observations and 107 variables.
NOTE: DATA statement used (Total process time):
real time 28.65 seconds
cpu time 0.79 seconds
Is the year portion of that correct? Why are you storing it as a character...that could cause you issues.
long story
Just a hard coded year for information only per record. I work at a School and it's easer to read than a term number. We can dump it when we are done since each record has the term indicator. We are stacking all the records from 50+ files once the data types are all in line and 5-10 differnt staff mebers doing this processing over the years. Thank you for your help and attention to my coding. -KJ
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.