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 / user-9041070

EsotericPunk's questions

Martin Hope
EsotericPunk
Asked: 2024-08-22 10:09:32 +0800 CST

Tentando criar uma variável de macro de data para usar em uma instrução WHERE

  • 5

Durante toda a minha vida, não consigo descobrir como corrigir esses formatos para uma macro de data utilizável. Tenho duas informações que desejo usar para criar variáveis ​​de macro de data. O primeiro é um ano e o segundo é uma tag que me informa se eu crio as variáveis ​​para um determinado ano ou para o ano anterior. Por exemplo, se eu definir o ano como 2025 e o período como PREV, quero criar as variáveis ​​de data para 2024. As datas que desejo são o início do ano, o final do ano, 6 meses antes do início e 6 meses depois. o fim. Estou procurando que todos tenham o formato 01JAN2024.

Tenho rastreado fóruns e o site de ajuda do SAS e tentei mil combinações. Não consigo encontrar nada que funcione e nem sei como imprimir corretamente os resultados para verificar. Aqui está o que tentei mais recentemente:

%let year   = 2025;
%let period     = PREV;
%let start_date = %sysfunc(mdy(1, 1, &meas_yr));

%macro set_dates;
    %if &period = PREV 
    %then %do;
        %let p_start = %sysfunc(intnx(year, &start_date, -1, beg));
        %let p_end   = %sysfunc(intnx(year, &start_date, -1, end));
        %let period_start  = %sysfunc(putn(&p_start, date9.));
        %let period_end    = %sysfunc(putn(&p_end,   date9.));
    %end;
    %else %do;
        %let p_start = %sysfunc(intnx(year, &start_date,  0, beg));
        %let p_end   = %sysfunc(intnx(year, &start_date,  0, end));
        %let period_start  = %sysfunc(putn(&p_start, date9.));
        %let period_end    = %sysfunc(putn(&p_end,   date9.));
    %end;
%mend set_dates;
%set_dates;

%let period_lkbk  = %sysfunc(intnx(month, &p_start., -6, beg), date9.);
%put &period_lkbk;
%let period_lkfw  = %sysfunc(intnx(month, &p_end.,    6, end), date9.);
%put &period_lkfw;

A seguir está meu código para testar o que está sendo definido:

%put Date_Test_1 : %sysfunc(putn(&p_start, date9.));
%put Date_Test_2 : &period_start;
%put Date_Test_3 : %sysfunc(putn(&p_end,   date9.));
%put Date_Test_4 : &period_end;
%put Date_Test_5 : &period_lkbk;

E os resultados que obtenho são:

SYMBOLGEN:  Macro variable P_START resolves to 23376
27         
28         %put Date_Test_1 : %sysfunc(putn(&p_start, date9.));
Date_Test_1 : 01JAN2024
29         %put Date_Test_2 : &period_start;
SYMBOLGEN:  Macro variable PERIOD_START resolves to 01JAN2024
Date_Test_2 : 01JAN2024
30         %put Date_Test_3 : %sysfunc(putn(&p_end,   date9.));
WARNING: Apparent symbolic reference P_END not resolved.
WARNING: Apparent symbolic reference P_END not resolved.
ERROR: Argument 1 to function PUTN referenced by the %SYSFUNC or %QSYSFUNC macro function is not a number.
ERROR: Invalid arguments detected in %SYSCALL, %SYSFUNC, or %QSYSFUNC argument list.  Execution of %SYSCALL statement or %SYSFUNC 
   or %QSYSFUNC function reference is terminated.
Date_Test_3 :
31         %put Date_Test_4 : &period_end;
SYMBOLGEN:  Macro variable PERIOD_END resolves to 31DEC2024
Date_Test_4 : 31DEC2024
32         %put Date_Test_5 : &period_lkbk;
SYMBOLGEN:  Macro variable PERIOD_LKBK resolves to 01JUL2023
Date_Test_5 : 01JUL2023
33         %put Date_Test_6 : &period_lkfw;
SYMBOLGEN:  Macro variable PERIOD_LKFW resolves to .
Date_Test_6 : .

Eventualmente eu quero usar isso em uma instrução dentro do proc sql assim:

WHERE startdate >= "&period_lkbk."d and enddate <= "&period_lkfw."d;

Por que p_end não está resolvendo? Sinto que estou perto, mas não consigo chegar à linha de chegada.

date
  • 1 respostas
  • 19 Views

Sidebar

Stats

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

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +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