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

Hi, everyone:

Just wondering how to extract the red portion of the following strings?

client/data/20/0000893220-98-000530.txt

client/data/810084/0001193125-08-059176.txt

client/data/914208/0000950129-07-000703.txt

client/data/1036213/0001036213-98-000015.txt

client/data/1103345/0001103345-05-000031.txt

client/data/1161175/0000950123-10-012321.txt

The red string always fall between the third slash and the .txt portion.

I understand I need to use anypunct and anynum to solve this problem.  However, after several try, I still get 0.  Thank you!

1 ACCEPTED SOLUTION

Accepted Solutions
Ksharp
Super User
data _null_;
input x $100.;
y=scan(x,-2,'./');
put x= y=;
cards;
client/data/20/0000893220-98-000530.txt
client/data/810084/0001193125-08-059176.txt
client/data/914208/0000950129-07-000703.txt
client/data/1036213/0001036213-98-000015.txt
client/data/1103345/0001103345-05-000031.txt
client/data/1161175/0000950123-10-012321.txt
;
run;

Ksharp

View solution in original post

5 REPLIES 5
Ksharp
Super User
data _null_;
input x $100.;
y=scan(x,-2,'./');
put x= y=;
cards;
client/data/20/0000893220-98-000530.txt
client/data/810084/0001193125-08-059176.txt
client/data/914208/0000950129-07-000703.txt
client/data/1036213/0001036213-98-000015.txt
client/data/1103345/0001103345-05-000031.txt
client/data/1161175/0000950123-10-012321.txt
;
run;

Ksharp

caveman529
Calcite | Level 5

Thank you, Ksharp and sunilzood!  It works like charm on my data.  Could you explain a little bit of the more about the

y=scan(x,4,'./');

Especially, the 4 and ./ part, since there are multiple slashes...  Thank you!

Ksharp
Super User

4 means the fourth part.

./ means take both . and / as separator .

caveman529
Calcite | Level 5

Wow, this is concise!

sunilzood
Calcite | Level 5

Ksharp solution is Perfect , But when I tried it skipped alternate rows. A little modification just by adding " : "  will work perfect.  Please try:

data _null_;

input x : $  100.;

y=scan(x,4,'./');

put x= y=;

cards;

client/data/20/0000893220-98-000530.txt

client/data/810084/0001193125-08-059176.txt

client/data/914208/0000950129-07-000703.txt

client/data/1036213/0001036213-98-000015.txt

client/data/1103345/0001103345-05-000031.txt

client/data/1161175/0000950123-10-012321.txt

;

run;

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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
  • 5 replies
  • 775 views
  • 6 likes
  • 3 in conversation