0
votes

Comment séparer deux variables de macro variables Nom avec un soulignement?

J'essaie de séparer un nom de jeu de données créé par deux variables macro par un soulignement, mais cela me donne une erreur dans% macro create_table_table. XXX PRE>

J'ai essayé d'utiliser un point à la fin de la première variable macro mais n'a pas fonctionné comme prévu. Comment puis-je résoudre cette situation? P>

%macro create_tables;
    * NOTE THE DOUBLE AMPERSAND! *;
    data &&_produto&i_&&_mes_char&j;
        set aux_base_defaults;
        if fim_mes = &&_fim_mes&j and cod = &&_id_produto&i;
    run;
%mend create_tables;

*------------------------------------------*;
* DEFINE MACRO VARIABLES *;
*------------------------------------------*;
proc sql;

create table produtos_a_considerar as
select b.sigla, a.cod
    from (select distinct cod
                from aux_base_defaults
            group by cod) a
inner join ecl.referencia_produtos b on b.id_produto = a.cod;

quit;

data _null_;
    set produtos_a_considerar;
    call symput( '_produto' || left(trim(_N_)) , trim(sigla));
    call symput( '_id_produto' || left(trim(_N_)) , cod);
    call symput( '_obs_produto' , _N_ );
run;

data _null_;
    set dim_fim_mes;
    call symput( '_fim_mes' || left(trim(_N_)) , fim_mes );
    call symput( '_mes_char' || left(trim(_N_)) , substr(mes_char,1,7));
    call symput( '_obs_fim_mes' , _N_ );
run;

*-----------------------------------------*;
* SUBMIT EXAMPLE5 FOR EACH DATASET *;
*-----------------------------------------*;
%macro loop;
    %do i=1 %to &_obs_produto;  
        %do j=1 %to &_obs_fim_mes;
            %create_tables;
        %end;
    %end;
%mend loop;
%loop;


4 commentaires

Vous pourriez avoir une présentation plus propre du flux de travail apprendre à exécuter par traitement de groupe. Une fois que vous avez obtenu cela, vous ne devrez pas calculer chaque combinaison des variables et traiter chaque sous-ensemble de combinaisons.


Pourriez-vous s'il vous plaît être plus détaillé? Je ne l'ai pas eu


Énumérez les variables dans le tableau et décrivez comment elles sont liées. Il semble que vous placiez les valeurs clés distinctes de deux tables dans un grand nombre de symboles de macro, puis imbriqués les boucler pour créer une table séparée pour chaque combinaison. Avez-vous vraiment besoin de tables séparées avec les valeurs Produto et Mes_Char dans les noms de table? En SQL, une jointure interne fait essentiellement le même processus de jointure à la fois et que les données peuvent être utilisées plus simplement en aval avec approprié par et relevé des déclarations.


Oui, Richard, j'ai besoin de chaque table avec des valeurs Produto et Mes_Char, car j'essaie de calculer des courbes par défaut de perte pour chaque produit et chaque mes_char. Mais j'ai eu votre Ideia merci


3 Réponses :


1
votes

Dans cette instance, vous avez besoin de 2 points - d'abord pour séparer votre variable de boucle du soulignement, puis une autre pour séparer la macro variable de gauche résultant du soulignement après avoir résolu le premier lot d'ampères.

Il est souvent utile d'écrire un exemple minimal pour vérifier que ce type de chose fonctionne comme vous vous attendez. E.g. xxx

sortie: xxx


0 commentaires

0
votes

Vous avez probablement besoin de plus de périodes. Essentiellement un pour chaque passage que le processeur macro doit faire pour résoudre pleinement les références variables macro.

Mais il est probablement plus facile de rétrécirer votre programme afin de ne pas avoir à vous en soucier. xxx


0 commentaires

0
votes

Les deux cas ont fonctionné bien! Merci gars pour votre aide xxx


0 commentaires