Les posteurs les plus actifs de la semaine
Eric Wajnberg
 
zezima
 
Nik
 
margotte185
 
c@ssoulet
 
Coco
 
Ayana
 


Les bonnes idées SAS

Voir le sujet précédent Voir le sujet suivant Aller en bas

Les bonnes idées SAS

Message par joyeux_lapin13 le Sam 14 Avr 2012 - 20:26

Je créé ce topic afin que les âmes charitables puissent mettre leur macro SAS!

Le support SAS

Un lien directe vers le site du support SAS où l'on peut retrouver le détail des syntaxes avec exemple de toutes les procédures du module SAS/STAT: http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#aceclus_toc.htm (regarder à gauche l'inventaire).


Dernière édition par joyeux_lapin13 le Jeu 10 Mai 2012 - 8:39, édité 2 fois
avatar
joyeux_lapin13

Nombre de messages : 1881
Age : 34
Localisation : Mayotte
Date d'inscription : 21/04/2010

Voir le profil de l'utilisateur https://lemakistatheux.wordpress.com/

Revenir en haut Aller en bas

Re: Les bonnes idées SAS

Message par joyeux_lapin13 le Lun 23 Avr 2012 - 12:40

Parcourir colonnes (méthode itérative)

Un petit code que je trouve, personnellement, bien pratique sous SAS: il permet de créer une liste contenant le nom des variables de type qualitative (comprendre: format chaîne de caractères) et une liste contenant le nom des variables de type quantitative (comprendre: format numérique) à partir de l'ensemble des variables disposées en colonne. Soit, l'une des méthodes sous SAS pour parcourir vos colonnes une à une!


PROC CONTENTS DATA = table NOPRINT OUT = contents;
RUN;

DATA contents_num;
SET contents(WHERE = (INDEX(FORMAT,"$") <= 0));
RUN;

DATA contents_char;
SET contents(WHERE = (INDEX(FORMAT,"$") > 0));
RUN;

PROC SQL NOPRINT;
SELECT DISTINCT(NAME) INTO :list_variables_cont SEPARATED BY ' ' FROM contents_num;
SELECT COUNT(NAME) INTO :nb_variables_cont FROM contents_num;
QUIT;

PROC SQL NOPRINT;
SELECT DISTINCT(NAME) INTO :list_variables_char SEPARATED BY ' ' FROM contents_char ;
SELECT COUNT(NAME) INTO :nb_variables_char FROM contents_char ;
QUIT;

%DO iteration_cont = 1 %TO &nb_variables_cont.;

%PUT je pointe sur %SCAN(&list_variables_cont., &iteration_cont.)

%END;

%DO iteration_char = 1 %TO &nb_variables_char .;

%PUT je pointe sur %SCAN(&list_variables_char ., &iteration_char .)

%END;


NB: ce code doit figurer dans une macro.
avatar
joyeux_lapin13

Nombre de messages : 1881
Age : 34
Localisation : Mayotte
Date d'inscription : 21/04/2010

Voir le profil de l'utilisateur https://lemakistatheux.wordpress.com/

Revenir en haut Aller en bas

Re: Les bonnes idées SAS

Message par niaboc le Lun 9 Déc 2013 - 20:20

Plusieurs façons pour connaître le nombre de ligne d'une table :

Code:
%LET DSID = %SYSFUNC(OPEN(Paysan.Base_paysan_breton_socio));
%LET NOBS = %SYSFUNC(ATTRN(&DSID,NOBS));
%LET NVARS = %SYSFUNC(ATTRN(&DSID,NVARS));
%LET RC = %SYSFUNC(CLOSE(&DSID));
%put &nobs;
%put &nvars;


Code:
proc sql noprint;
select count(*)into : nb_ligne2 from Paysan.Base_paysan_breton_socio ;
quit;

%put &nb_ligne2;




Code:
data _null_;
  set Paysan.Base_paysan_breton_socio;
  call symput("nb_ligne3", _N_);
  run;

  %put &nb_ligne3;



Code:
data test3;
  set test2 nobs=nombre;
  call symput("nb_ligne4",nombre);
run;

%put &nb_ligne4;
avatar
niaboc

Nombre de messages : 918
Age : 30
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Les bonnes idées SAS

Message par niaboc le Lun 20 Jan 2014 - 14:00

Voici une fonction qui peut être utile : l'inverse de la fonction lagX() de SAS :

Code:

/*on crée la fonction inverselag que l'on stock dans la work.fct*/
PROC FCMP OUTLIB=work.fct.inverselag ;
   FUNCTION lead (dataset $, var $, lead) ;
      /*ouvre la table*/
      dsid = OPEN(dataset) ;
      /*nombre de ligne dans la table*/
      nb = ATTRN(dsid, "NOBS") ;
      /*fin de la table*/
      IF lead > nb THEN res = . ;
      ELSE DO ;
         /*lit la "lead"ième ligne*/
         rc = FETCHOBS(dsid, lead) ;
         /*renvoie l'observation de la colonne "VARNUM"ième colonne et écrit*/
         res = GETVARN(dsid, VARNUM(dsid, var)) ;
      END ;
      /*ferme la table*/
      rc = CLOSE(dsid) ;
      /*retourne le résultat*/
      RETURN (res) ;
   ENDSUB ;
RUN ;
QUIT ;

Code:

/*spécifie ou sont situées les fonctions créées*/
options cmplib=work.fct;

Code:

/*exemple sur une table sashelp*/
DATA work.B2 ;
  SET sashelp.air ;
  /*inverse de lag()*/
  next  = LEAD("sashelp.air", "air", _N_+1) ;
  /*inverse de lag2()*/
  next2 = LEAD("sashelp.air", "air", _N_+2) ;
RUN ;
avatar
niaboc

Nombre de messages : 918
Age : 30
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Les bonnes idées SAS

Message par niaboc le Mer 20 Juil 2016 - 9:27

Petit bout de code pour supprimer tous les labels d'une table :

Code:
proc datasets lib=ma_lib  nolist;
    modify ma_table;
        attrib _all_ label='';
    quit;
run;

Niaboc
avatar
niaboc

Nombre de messages : 918
Age : 30
Localisation : Paris
Date d'inscription : 05/05/2008

Voir le profil de l'utilisateur

Revenir en haut Aller en bas

Re: Les bonnes idées SAS

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum