AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 77029847
Accepted
LuizZ
LuizZ
Asked: 2023-09-03 03:59:43 +0800 CST2023-09-03 03:59:43 +0800 CST 2023-09-03 03:59:43 +0800 CST

Como extrair para uma nova variável os últimos 11 caracteres de uma variável string no SAS somente se forem números

  • 772

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.

sas
  • 1 1 respostas
  • 15 Views

1 respostas

  • Voted
  1. Best Answer
    Tom
    2023-09-03T04:10:07+08:002023-09-03T04:10:07+08:00

    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.

    data have;
      input CompanyName $50. ;
    datalines;
    ASASD FSFASD ASDFASDFASD
    ASDFAS ADFASDF FDAFADFADF 01232143211
    ADAFSAD ADSFASDF 03331286532
    LKJLKJK KLKJKJL
    LLKJLKJ FDAFASDF 75423243211
    ;
    

    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.

    data want;
      set have;
      length id $11 ;
      if length(companyname) > 11 then do;
        id = substr(companyname,length(companyname)-10);
        if verify(id,'0123456789') then id=' ';
      end;
    run;
    

    Resultado

    Obs    CompanyName                                  id
    
     1     ASASD FSFASD ASDFASDFASD
     2     ASDFAS ADFASDF FDAFADFADF 01232143211    01232143211
     3     ADAFSAD ADSFASDF 03331286532             03331286532
     4     LKJLKJK KLKJKJL
     5     LLKJLKJ FDAFASDF 75423243211             75423243211
    

    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.

    else companyname = substr(companyname,1,length(companyname)-11);
    

    Resultados

    Obs    CompanyName                      id
    
     1     ASASD FSFASD ASDFASDFASD
     2     ASDFAS ADFASDF FDAFADFADF    01232143211
     3     ADAFSAD ADSFASDF             03331286532
     4     LKJLKJK KLKJKJL
     5     LLKJLKJ FDAFASDF             75423243211
    
    • 1

relate perguntas

  • Resolva a variável macro SAS na instrução Select

  • Como escrever uma macro que cria uma variável global a partir de outra variável global e parâmetro de macro

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve