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;

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
  • 5 replies
  • 638 views
  • 6 likes
  • 3 in conversation