0
votes

SAS rejoindre (ou insérer) petite table à la grande table

J'ai peu de problème. J'ai une grande table et quelques petites tables où de petites tables incluant une partie des champs de la grande table. Comment puis que je puisse insérer des tables (ou union) sur la base de si le champ est les mêmes données, si la petite table n'a pas de champ de Big - Set Null / 0 dans Big Table.

Exemple: P>

data temp1;
infile DATALINES dsd missover;
input a b c d e f g;
CARDS;
1, 2, 3, 4,5,6
2, 3, , 5
3, 3
4,,3,2,3,
;
run;

data temp2;
infile DATALINES dsd missover;
input a c e g;
CARDS;
5, 2, 3, 4
6, 3, , 5
7, 3
;
run;


0 commentaires

3 Réponses :


1
votes

Il n'est pas très clair pour moi quelle opération vous avez l'intention de faire, mais certaines pensées initiales sont:

  1. Pour comparer les colonnes entre deux ensembles de données (et vérifier si une valeur existe dans l'une d'entre elles), il est préférable d'utiliser une jointure extérieure. Vous pouvez faire des jointures via Fusionner la clause dans un DataStep ou plus élégamment Utiliser proc SQL .
  2. Cependant, en utilisant soit une autre approche, vous devrez spécifier quelles lignes dans temp1 et TEMP2 doivent être comparées - vous vous joignez généralement sur une colonne disponible dans les deux les tables.

    Pour nous aider à résoudre votre problème, pourriez-vous éventuellement fournir la sortie correcte pour votre opération souhaitée, si vous exécutez-le sur TEMP1 et temp2 ? Cela montrerait quelles options que vous avez explorées et ce qui doit être réparé là-bas.


1 commentaires

Ah, j'ai trouvé une solution. Il suffisait d'utiliser TEMP3; SET TEMP1 TEMP2; courir;



1
votes

Vous devriez essayer procendez-vous. Ce sera plus efficace car vous ne louerez plus votre petite table et à nouveau différent dans xxx

/ * ceci est à peu près identique au code ci-dessus mais pas lire votre grosse table et sera efficace * / xxx

plus sur procendant dans la documentation http://support.sas.com/documentation/cdl/fr/proc/65145/html/default/viewer.htm#n19kwc3onglzH2N1L2K4E39EDV3X .htm


0 commentaires

1
votes

C'est exactement ce que SAS fait par défaut.

proc contents data=have1 out=cont1 noprint; run;
proc contents data=have2 out=cont2 noprint; run;
proc sql noprint;
  select a.name into :varlist separated by ','
  from cont2 a 
  inner join cont1 b 
  on upcase(a.name) = upcase(b.name)
  ;
...
insert into have1 (&varlist) select &varlist from have2 ;


1 commentaires

Grand merci d'explication, j'aime acquérir de nouvelles connaissances :)