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

Hi all,

I am wondering if this is possible - and if so how? :

I have a dataset called test - it contains values like:

COL1    COL2         COL3

ABB     Test why     OQSJ

AIW     This is ex     QSDJ

AIQ     Why Test     KAJL

Questions:

1) Is there any way in sas to search COL2 for the word "Test" and then output a new dataset that only contains the rows that had the word "Test" somewhere in COL2.

2) Is there any way in sas for me to search specific sentences in COL2? Example - I want sas to search for "This is ex" and "Why Test" and output a new dataset that only contains rows where these two are true.

Please post sample code if possible. Thanks!

1 ACCEPTED SOLUTION

Accepted Solutions
AncaTilea
Pyrite | Level 9

Hi.

Please see below code.

*read in your data;

data test;

    input col1 $1-4     col2 $ 5-14         col3 $ 15-18;

    cards;

ABB Test why  OQSJ

AIW This is ex QSDJ

AIQ Why Test  KAJL

;

run;

*only keep the records that have in COL2 the word "test";

data want_1;

    set test (where= (prxmatch("m/test/oi",col2) > 0));

run;

*only keep the records that have "why test' or "this is ex";

data want_2;

    set test (where= (prxmatch("m/Why test|this is ex/oi",col2) > 0));

run;

I hope it helps.

You can also run the data once;

data want_1 want_2;

    set test;

     if (prxmatch("m/test/oi",col2) > 0)) then output want_1;

     if (prxmatch("m/Why test|this is ex/oi",col2) > 0)) then output want_2; the two data

run;

Good luck.

Anca.

I collapsed the two data steps into one.

View solution in original post

6 REPLIES 6
AncaTilea
Pyrite | Level 9

Hi.

Please see below code.

*read in your data;

data test;

    input col1 $1-4     col2 $ 5-14         col3 $ 15-18;

    cards;

ABB Test why  OQSJ

AIW This is ex QSDJ

AIQ Why Test  KAJL

;

run;

*only keep the records that have in COL2 the word "test";

data want_1;

    set test (where= (prxmatch("m/test/oi",col2) > 0));

run;

*only keep the records that have "why test' or "this is ex";

data want_2;

    set test (where= (prxmatch("m/Why test|this is ex/oi",col2) > 0));

run;

I hope it helps.

You can also run the data once;

data want_1 want_2;

    set test;

     if (prxmatch("m/test/oi",col2) > 0)) then output want_1;

     if (prxmatch("m/Why test|this is ex/oi",col2) > 0)) then output want_2; the two data

run;

Good luck.

Anca.

I collapsed the two data steps into one.

vomer
Obsidian | Level 7

@anca thanks for that, I will try it.

Could you please explain  this part? - m/test/oi - what does the m and the oi do?

AncaTilea
Pyrite | Level 9

Vomer,

The 'm' tag at the beginning of the search string tells PRXMATCH that it is doing a matching operation, this is the default. So you could delete it.

The 'o' tag at the end tells SAS to compile the parse string once. This is also the default because the parse string is a constant. So you can take this one off, too.

The 'i' tag at the end forces a case insensitive match so that "THIS" is equal to "this" for the purpose of matching.  If you want case sensitive you use "-i"


See more on PRXMATCH here:

38719 - Use PRXMATCH in place of multiple INDEX functions

Good luck,

Anca.

vomer
Obsidian | Level 7

Thanks! that is really interesting. I will read up on it as well.

Reeza
Super User

You can also look up the FIND and INDEX function in SAS.

NagendraKumarK
Calcite | Level 5

proc sql; create table one as (select col1,col2,col3 from hello where col2 like '%Test%' ); create table two as (select col1,col2,col3 from hello where ((col2  like 'This is ex%') or (col2 like 'Why Test%')) ); run;

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
  • 6 replies
  • 1848 views
  • 7 likes
  • 4 in conversation