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

Hi,

 

I have four-ish SAS steps that i want to repeat until no more records are deleted in the last step.


I was thinking do/until sounded right, but i have never used it before, so i wasn't sure.  So keep in mind, while i'm playing around with writing stuff, nothing is currently running.  This is pretty much abstract theory so far.

 

But i was thinking:

 

%macro

%do %until (var=0);

  blah - frequency

  blah - second separate data step

  blah - third separate data step

  blah - other data step

  blah - check dictionary tables for record counts

  var=[record counts]-[record counts]

%end;

%mend;

 

So in step 5, it was grabbing the nobs from the dictionary tables, so could tell whether any records were deleted in step 4, and have a tangible count of it.  If no records were deleted, stop processing, if records were deleted, process the cycle again.

 

But then i realized i needed an iterative counter to track the datasets through each cycle and then i realized i had to write in a split path at the top so that first time through it would take one dataset to start, but second+ it would take the end table from the previous time through, and now i'm wondering if this is even the best way to do it.

 

What do you guys think?

 

Thanks.

1 ACCEPTED SOLUTION

Accepted Solutions
MeganE
Pyrite | Level 9

I did end up getting this to work with a do/until and built in counter, but the code is too long to post here.  If someone wants to send me a message with a question, feel free.  But i don't know how to delete posts, so i'm going to use this one as the solution. 🙂

View solution in original post

2 REPLIES 2
Astounding
PROC Star

Since the question is conceptual only at this point, here are some gut reactions.

 

First, since the possibility of an infinite loop exists, I would be very careful to make sure the program ends (regardless of the final coding techniques used).

 

Second, I would reuse the same data set name until SAS is sick of it.  For example, capture the number of records after step 3 into a macro variable &BEFORE, then capture the number of records after step 4 into &AFTER.  See if &BEFORE=&AFTER.  Then you don't need to count number of iterations, and you don't need to change the data set names each time.

MeganE
Pyrite | Level 9

I did end up getting this to work with a do/until and built in counter, but the code is too long to post here.  If someone wants to send me a message with a question, feel free.  But i don't know how to delete posts, so i'm going to use this one as the solution. 🙂

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

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.

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
  • 2 replies
  • 853 views
  • 0 likes
  • 2 in conversation