BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
Jaaa
Fluorite | Level 6

Hi SAS users,

 

I'd like to extract quarterly date in numerical type from numerical daily date. However, It just produces the quarters (variable is date) as the same observations over all time periods. Thus, I wonder would you please have a look for me? Many thanks in advance!!

 

Here is the input data:

 

rdate (numerical and DATE9.)

31mar1980

31mar1980

31mar1980

31mar1980

30jun1980

30jun1980

30jun1980

30sep1980

30sep1980

30sep1980

30sep1980

30sep1980

31dec1980

31dec1980

31dec1980

31dec1980

.....

 

Here is the code: 

 data MMIO_CUSIP;
  set MMIO_CUSIP;
  month=month(rdate);
  year=year(rdate);
  q = qtr(rdate);
  date = put(q,YYQ6.);
  format date YYQ6.;
  run;

 

I wanna it to have the numerical quarterly format like this:

 

date

1980Q1

1980Q1

1980Q1

1980Q2

1980Q2

1980Q2

1980Q3

1980Q3

1980Q3

1980Q4

1980Q4

1980Q4

....

 

Any helpful comments will be grateful! 

1 ACCEPTED SOLUTION

Accepted Solutions
Reeza
Super User

You just change the format you don't need any calculations. 

 

format rdate yyq6.;

*if you want a new variable;
qdate=rdate;
format qdate yyq6.;

View solution in original post

10 REPLIES 10
kiranv_
Rhodochrosite | Level 12

what is the error you get.

Jaaa
Fluorite | Level 6

It just produces the quarters as the same observations over all time periods. Might you know why did it happen like that? 

date 
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
1960Q1
.....
kiranv_
Rhodochrosite | Level 12

when ever you see your data is with 1960, it often raises a flag something is not right. show your input data please

Jaaa
Fluorite | Level 6

Sure! Here we go: Date is from 1980Q1 - 2016Q4. Many thanks indeed!

 

rdate
31mar1980
31mar1980
31mar1980
31mar1980
30jun1980
30jun1980
30jun1980
30sep1980
30sep1980
30sep1980
30sep1980
30sep1980
31dec1980
31dec1980
31dec1980
31dec1980
31dec1980
.....
kiranv_
Rhodochrosite | Level 12

you are applying date format on extracted quarter value ( whose value will be 1 2 3 or 4)and hence the errors. try applying format on the date rather than quarter value.

data abc;
input date:date9.;
format date YYQ6.;
datalines;
31mar1980
31mar1980
30jun1980
30jun1980
30jun1980
30sep1980
30sep1980
30sep1980
30sep1980
30sep1980
31dec1980
31dec1980
31dec1980
31dec1980
31dec1980
; 

 

Jaaa
Fluorite | Level 6

 

Thank you for your post! I tried this but it presents errors about the date formats. Do you possibly know why it is? Many thanks! 

484   data MMIO_CUSIP;
485    set MMIO_CUSIP;
486    month=month(rdate);
487    year=year(rdate);
488    q = qtr(rdate);
489    date = put(q,YYQ6.);
490   input date: date9.;
                  ------
                  48
ERROR 48-59: The informat $DATE was not found or could not be loaded.

491   format date YYQ6.;
                  -----
                  48
ERROR 48-59: The format $YYQ was not found or could not be loaded.

492    run;

NOTE: The SAS System stopped processing this step because of errors.
WARNING: The data set MMIO_CUSIP may be incomplete.  When this step was stopped there
         were 0 observations and 23 variables.
WARNING: Data set MMIO_CUSIP was not replaced because this step was stopped.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds

 

Reeza
Super User

What's the format and type on your variable: rdate?

What does it currently look like and what do you want it to look like?

Jaaa
Fluorite | Level 6

Thank you for your reply! 

 

rdate (numerical and DATE9.)

31mar1980

31mar1980

31mar1980

31mar1980

30jun1980

30jun1980

30jun1980

30sep1980

30sep1980

30sep1980

30sep1980

30sep1980

31dec1980

31dec1980

31dec1980

31dec1980

....

 

I wanna convert the above format to the numerical quarterly type like this:

 

 date

1980Q1

1980Q1

1980Q1

1980Q2

1980Q2

1980Q2

1980Q3

1980Q3

1980Q3

1980Q4

1980Q4

1980Q4

......

Do you possibly know how to achieve that? Many thanks!!

Reeza
Super User

You just change the format you don't need any calculations. 

 

format rdate yyq6.;

*if you want a new variable;
qdate=rdate;
format qdate yyq6.;
Jaaa
Fluorite | Level 6

Thank you Reeza! It works now!! 

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 10 replies
  • 3671 views
  • 0 likes
  • 3 in conversation