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

Prezados, tudo bem? Estou iniciando no mundo do SAS e essa parte de Formatação de dados é bem complicada para mim no momento.

Estou com um pequeno problema aqui para fazer um Join. Tenho uma Tabela A que é gerado por um código do Netezza porém usando um PROC SQL e a Tabela B que crio com o PROC SQL normal.

Na Tabela A tem o campo de DATA_MOVIMENTO porém ele está em Character ($40.) e na Tabela B tenho o mesmo campo DATA_MOVIMENTO porém ele está em Date (Date9.)

 

Como faço para converter o campo Character ($40.) em Date (date9.)?

 

Tentei usar o código abaixo, porém ele retorna um erro.

PROC SQL;
ALTER TABLE WORK.TB_TESTE MODIFY DATA_MOVIMENTO FORMAT DATE9.;

 

ERROR: Character column DATA_MOVIMENTO requires a character format specification.

1 ACCEPTED SOLUTION

Accepted Solutions
Holmes
Obsidian | Level 7

O que deu certo foi criar uma nova coluna com formato de data.

 

Usei o seguinte código:

 

PROC SQL;
CREATE TABLE X AS SELECT
*,
INPUT(DATA_MOVIMENTO,anydtdte21.) format date9. AS ANO_MES_MOVIMENTO_1
FROM TABLE_Y
;QUIT;

View solution in original post

7 REPLIES 7
Holmes
Obsidian | Level 7

Opa, tudo bem Lucas?

Tentei aqui porém é o mesmo erro que o anterior.

 

 

ERROR: Character column DATA_MOVIMENTO requires a character format specification.



OliveiraMiguelZ
Obsidian | Level 7
PROC SQL;
Create table TabelaDestino AS

SELECT
*,
INPUT( DATA_MOVIMENTO, BEST40. ) AS DT_MOVIMENTO FORMAT=DDMMYY10.
FROM TabelaOrigem
Holmes
Obsidian | Level 7

@OliveiraMiguelZ  escreveu:
PROC SQL;
Create table TabelaDestino AS

SELECT
*,
INPUT( DATA_MOVIMENTO, BEST40. ) AS DT_MOVIMENTO FORMAT=DDMMYY10.
FROM TabelaOrigem

 Oi Miguel, valeu pela resposta! Testei aqui e ele retornou missing.

Vou mostrar como está o campo, acho que fica melhor até para me ajudar.

Holmes_0-1632488630940.png

Holmes_1-1632488656081.png

 

OliveiraMiguelZ
Obsidian | Level 7
O formato que você mostrou é um YYMMDD10. Você pode consultar isso pelos documentos do SAS, por exemplo, jogando no Google o formato que você tem seguido de "format SAS",ex: "YYYY-MM-DD SAS FORMAT". Uma das páginas vai te dizer qual o nome desse formato no SAS.

Tenta assim:

PROC SQL;
Create table TabelaDestino AS
SELECT
*,
INPUT( DATA_MOVIMENTO, YYMMDD10. ) AS DT_MOVIMENTO FORMAT=YYMMDD10.

FROM TabelaOrigem;

QUIT;

felipe_campos
Fluorite | Level 6
Parece mais fácil transformar o B.DATA_MOVIMENTO para CHAR.

tenta algo como:

PROC SQL;
CREATE TABLE FINAL AS
SELECT A.* FROM TAB1 A
INNER JOIN TAB2 B ON (A.DATA_MOVIMENTO = PUT(B.DATA_MOVIMENTO,YYMMDD10.);
QUIT;
Holmes
Obsidian | Level 7

O que deu certo foi criar uma nova coluna com formato de data.

 

Usei o seguinte código:

 

PROC SQL;
CREATE TABLE X AS SELECT
*,
INPUT(DATA_MOVIMENTO,anydtdte21.) format date9. AS ANO_MES_MOVIMENTO_1
FROM TABLE_Y
;QUIT;