DATA Step, Macro, Functions and more

Date Format Coversion

Accepted Solution Solved
Reply
Contributor ZZB
Contributor
Posts: 43
Accepted Solution

Date Format Coversion

Hello,

I have a set of time series of date data (see below). But the type of data is 'Numerical', the Format is 'Best12.' and informat is 12.''. When I use the code 'year(date)', I get wrong outcome. How to manipulate these date data if I want to get '1960 for year and 01 for month of first obs' using codes 'year(date) and month(date)'? Thanks

date

196001

196002

196003

196004

.....

.....


Accepted Solutions
Solution
‎02-24-2015 02:58 PM
Respected Advisor
Posts: 3,001

Re: Date Format Coversion

year=floor(date/100);

month=mod(date,100);

The YEAR and MONTH functions that you are trying to use only work on data stored as SAS dates, which these are not.

--
Paige Miller

View solution in original post


All Replies
Solution
‎02-24-2015 02:58 PM
Respected Advisor
Posts: 3,001

Re: Date Format Coversion

year=floor(date/100);

month=mod(date,100);

The YEAR and MONTH functions that you are trying to use only work on data stored as SAS dates, which these are not.

--
Paige Miller
Super User
Posts: 3,918

Re: Date Format Coversion

If you want to make a SAS date from your date number first:

format sas_date date9.;

sas_date = input(date, yymmn6.);

year = year(sas_date);

month = month(sas_date);

Contributor
Posts: 30

Re: Date Format Coversion

Hi ,

We can also use the below approach .

data have ;

input date ;

year = input(substr(strip(date),1,4),6.);

month= input(substr(strip(date),5,2),4.);

datalines;

196001

196002

196003

196004

;

run;

🔒 This topic is solved and locked.

Need further help from the community? Please ask a new question.

Discussion stats
  • 3 replies
  • 303 views
  • 6 likes
  • 4 in conversation