Tenho um conjunto de dados com uma variável com nomes de empresas. Às vezes, esses nomes de empresas têm um ID pessoal nos últimos 11 caracteres.
Então quero criar uma nova variável com seus últimos 11 caracteres e mantê-la apenas se forem números.
Aqui está um exemplo do meu conjunto de dados:
DATA have;
INPUT CompanyName;
DATALINES;
ASASD FSFASD ASDFASDFASD
ASDFAS ADFASDF FDAFADFADF 01232143211
ADAFSAD ADSFASDF 03331286532
LKJLKJK KLKJKJL
LLKJLKJ FDAFASDF 75423243211
;
RUN;
Quero uma nova variável com valores ausentes para as linhas 1 e 4 e os últimos 11 valores numéricos para as linhas 2, 3 5 ( 01232143211
, 03331286532
, 75423243211
).
O que eu tentei?
PROC SQL;
CREATE TABLE WANT AS
SELECT
CompanyName,
case when prxmatch('/^\d{11}$/', substr(CompanyName, length(CompanyName) - 10)) > 0
then substr(CompanyName, length(CompanyName) - 10)
else "" end as ID_OWNER,
FROM have;
QUIT;
Mas tenho uma nova variável com todos os valores ausentes.
Muito mais fácil de fazer com código SAS em vez de código SQL.
Primeiro, certifique-se de que sua etapa de dados para criar os dados de exemplo realmente funcione.
Então, se a string for longa o suficiente para ter 11 caracteres, pegue os últimos 11 caracteres e certifique-se de que sejam todos dígitos.
Resultado
Você também pode querer remover o valor do id quando ele existir. Portanto, adicione esta instrução ELSE após a última instrução IF.
Resultados