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

Bom dia sou iniciante no SAS e estou coma seguinte dificuldade - Transformar o trecho do código sql abaixo para o formato do proc sql no SAS.

No código SQL ficaria assim: where cod_operadora || '|' || num_contrato in ('003 | 123456789', '001 | 987654321')

Detalhe: o campo cod_operadora é um campo texto e o campo num_contrato é um campo numérico.

Como eu poderia converter o trecho do sql para o proc sql do SAS, conseguem me ajudar?

 

1 ACCEPTED SOLUTION

Accepted Solutions
maguiremq
SAS Super FREQ

No problem-I'm happy to help. I went ahead and adapted the code based on what you provided. I think this is what you need, but please feel free to let me know if it doesn't capture something you need. The only issue I see with it is that it creates a Cartesian product, which may be problematic if you're working with a large data set or database. / Não há problema. Terei todo o gosto em ajudar. Eu fui em frente e adaptei o código com base no que você forneceu. Acho que é disso que você precisa, mas sinta-se à vontade para me avisar se não houver algo de que você precisa. O único problema que vejo é que ele cria um produto cartesiano, o que pode ser problemático se você estiver trabalhando com um grande conjunto de dados ou banco de dados.

 

data cadastro;
input cod_operadora :$3. instalacao $10.;
datalines;
003 ABCDEFGHIJ
001 ABCDEFGHII
002 ABCDEFGHHH
006 ABCDEFGGGG
;
run;

data cliente;
infile datalines delimiter = ",";
input num_contrato assinante $ tipo_contrato $;
datalines;
123456789,A,XYZ
987654321,B,ABC
929193921,C,ABC
999239123,D,EFG
;
run;

proc sql;
	select
				cad.cod_operadora,
				cad.instalacao,
				cli.num_contrato,
				cli.assinante,
				cli.tipo_contrato
	from
				cadastro cad, /* ou cadastro AS cad */
				cliente cli /* ou cliente AS cli */
	where
				catx(" | ", cod_operadora, num_contrato) in ("003 | 123456789", "001 | 987654321");
quit;

View solution in original post

3 REPLIES 3
maguiremq
SAS Super FREQ

@Jose_Roberto wrote:

Bom dia sou iniciante no SAS e estou coma seguinte dificuldade - Transformar o trecho do código sql abaixo para o formato do proc sql no SAS.

No código SQL ficaria assim: where cod_operadora || '|' || num_contrato in ('003 | 123456789', '001 | 987654321')

Detalhe: o campo cod_operadora é um campo texto e o campo num_contrato é um campo numérico.

Como eu poderia converter o trecho do sql para o proc sql do SAS, conseguem me ajudar?

 


Translated via Google from Portuguese to English--not sure how correct it is, but it translated it well enough for me to understand.

Good morning I am a beginner in SAS and I am having the following difficulty - Transform the sql code snippet below to the format of the sql proc in SAS.

In the SQL code it would look like this: where cod_operadora || '|' || num_contrato in ('003 | 123456789', '001 | 987654321')

Detail: the cod_operadora field is a text field and the num_contract field is a numeric field.

How could I convert the sql snippet to the SAS sql proc, can you help me?

 Here's my solution. Try running this code. / Aqui está minha solução. Tente executar este código.

 

data have;
input cod_operadora :$3. num_contrato;
datalines;
003 123456789
001 987654321
002 929193921
006 999239123
;
run;

proc print data = have;
run;

proc sql;
	select
				*
	from
				have
	where
				catx(" | ", cod_operadora, num_contrato) in ("003 | 123456789", "001 | 987654321");
quit;

The CATX function trims leading and trailing blanks, and inserts the " | " delimiter. / A função CATX apara os espaços em branco à esquerda e à direita e insere o caractere " | " delimitador.

 

Jose_Roberto
Calcite | Level 5
Bom dia! Obrigado pelo retorno.

A sua solução atende quando eu crio uma tabela com os dois campos, mas no
cenário em que tenho os dados distribuídos em duas tabelas distintas como
ficaria no proc sql do SAS o código sql abaixo?

select
cad.cod_operadora,
cad.instalacao,
cli.num_contrato,
cli.assinante,
cli.tipo_contrato

from
cadastro cad,
cliente cli
where
cad.cod_operadora || '|' || cli.num_contrato in ('003 | 123456789', '001 |
987654321')

Detalhe: o campo cad.cod_operadora é um campo texto e o campo
cli.num_contrato é um campo numérico.

Muito obrigado pela atenção e ajuda!


maguiremq
SAS Super FREQ

No problem-I'm happy to help. I went ahead and adapted the code based on what you provided. I think this is what you need, but please feel free to let me know if it doesn't capture something you need. The only issue I see with it is that it creates a Cartesian product, which may be problematic if you're working with a large data set or database. / Não há problema. Terei todo o gosto em ajudar. Eu fui em frente e adaptei o código com base no que você forneceu. Acho que é disso que você precisa, mas sinta-se à vontade para me avisar se não houver algo de que você precisa. O único problema que vejo é que ele cria um produto cartesiano, o que pode ser problemático se você estiver trabalhando com um grande conjunto de dados ou banco de dados.

 

data cadastro;
input cod_operadora :$3. instalacao $10.;
datalines;
003 ABCDEFGHIJ
001 ABCDEFGHII
002 ABCDEFGHHH
006 ABCDEFGGGG
;
run;

data cliente;
infile datalines delimiter = ",";
input num_contrato assinante $ tipo_contrato $;
datalines;
123456789,A,XYZ
987654321,B,ABC
929193921,C,ABC
999239123,D,EFG
;
run;

proc sql;
	select
				cad.cod_operadora,
				cad.instalacao,
				cli.num_contrato,
				cli.assinante,
				cli.tipo_contrato
	from
				cadastro cad, /* ou cadastro AS cad */
				cliente cli /* ou cliente AS cli */
	where
				catx(" | ", cod_operadora, num_contrato) in ("003 | 123456789", "001 | 987654321");
quit;

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

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
  • 3 replies
  • 5048 views
  • 2 likes
  • 2 in conversation