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

Okay, how about the following? You can drop index_year and test_yearmonth as you see fit.

data desired discarded;

   set raw;

   by permno;

   retain index_year;

  

   test_yearmonth = input(yearmonth, yymmn6.);

   if    first.permno or

         intck("year", index_year, test_yearmonth) > 2 then

      do;

         index_year = year(test_yearmonth);

         output desired;

      end;

   else

      output discarded;

run;

art297
Opal | Level 21

I still probably don't understand what you are trying to do and your examples don't seem to match the example dataset that you provided.

Like Tish, I changed my code to use the actual date, but didn't keep the calculated SAS date,

data want1 leftover;
  set have;
  if distcd IN (1262,1272) then output leftover;
  else output want1;
run;

data want2 deleted;
  set leftover;
  by permno;
  last_DCLRDT=lag(DCLRDT);
  if first.permno then output want2;
  else do;
    if intck('year',input(put(last_DCLRDT,8.),yymmdd8.),input(put(DCLRDT,8.),yymmdd8.),'c')
     le 2 then output deleted;
    else output want2;
  end;
  drop last_:;
run;

data want;
  set want1 want2;
run;

proc delete data=want1;
run;

proc delete data=want2;
run;

proc delete data=leftover;
run;

proc sort data=want;
  by permno year;
run;


ncross
Calcite | Level 5

Hi Tish and Arthur I try tweaking the codes to 3 year or 5 year hiatus and I am receiving the same output. Where I see the "2" i replace the digit is there something I am doing wrong?

art297
Opal | Level 21

I'd suggest starting a new thread, including a small example dataset, and explain what you are trying to do and the result (given the example) that you want to achieve.

bream_bn
Fluorite | Level 6

I came up with the below

data finaldata;

  set testdata;

  by permno distcd yearmonth ;

  retain last_yearmo;

proc sort data=testdata;

  by permno distcd yearmonth ;

run;

  if not first.permno or not first.distcd then do;

  val = yearmonth - last_yearmo;

  if val <= 200  then delete;

  end;

  last_yearmo=yearmonth;

run;

This though would delete 196600 from (196400 196600 196800) and not 196800

sas-innovate-2024.png

Don't miss out on SAS Innovate - Register now for the FREE Livestream!

Can't make it to Vegas? No problem! Watch our general sessions LIVE or on-demand starting April 17th. Hear from SAS execs, best-selling author Adam Grant, Hot Ones host Sean Evans, top tech journalist Kara Swisher, AI expert Cassie Kozyrkov, and the mind-blowing dance crew iLuminate! Plus, get access to over 20 breakout sessions.

 

Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 19 replies
  • 1717 views
  • 6 likes
  • 6 in conversation