IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

Créer une matrice "binaire"


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 64
    Points : 37
    Points
    37
    Par défaut Créer une matrice "binaire"
    Bonjour,

    Je cherche à construire une matrice (ou data) binaire sous SAS de taille 2^n, avec toutes les combinaisons possibles de (0,1)

    exemple avec n=3

    0 0 1
    0 1 0
    0 1 1
    1 0 0
    … … …
    1 1 1

    Il faudrait une macro automatique avec n comme paramètre.

    QQun a une idée?

    merci

  2. #2
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    Voilà une solution que je trouve plutôt sympa en utilisant le format binary :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %macro genere_matrice_binaire ( nb_col );
    data matrice_binaire_&nb_col. (drop = loop) ;
        do loop = 0 to 2**&nb_col. - 1 ;               
            bynary_num  = put (loop,  binary&nb_col..) ;
            output ;
        end ;
    run ; 
    %mend ;
    %genere_matrice_binaire ( 3 ) ;

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    GRAYCODE Function peut également répondre à ta requête (voir exemple 1 à modifier pour créer une dataset) :

    http://support.sas.com/documentation...hv6515cgp4.htm

    Cdt Ward

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 64
    Points : 37
    Points
    37
    Par défaut compléments
    désolé pour ma réponse tardive , merci beaucoup!!
    cela marche très bien , je viens de tester je travaillais sur autre chose.

    Malheureusement je me rends compte que ça ne répond pas exactement à ce que je veux, mon problème est finalement plus compliqué:
    je souhaiterais construire un programme qui ferait çà

    Dans une liste de nombres prédefinie [10,15,2,..8,1000] est ce qu'on peut obtenir une valeur cible [2500] en faisant une somme de nombres pris dans la liste prédéfinie. Je pensais qu'en utilisant une matrice binaire cela suffirait mais vu que dans mon problème on peut prendre deux fois le même nombre dans la liste prédéfinie cela ne va pas.

    je ne suis pas un expert de l'algorithmique, qqun a une idée?

    merci

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 133
    Points : 371
    Points
    371
    Par défaut
    Bonjour

    problème amusant...

    Si vous ne pouvez prendre au maximum que deux fois le même nombre dans une liste prédéfinie, vous devriez pourvoir vous en sortir en adaptant ce programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    %macro check;
    data test(keep=x: y:);
       array x(10);
       do i=1 to 10;
          x(i)=round(ranuni(25)*100,1);
       end;
       %do j=1 %to 10;
          do y&j=0 to 2 ;
    	     z&j=y&j*x(&j);
       %end;
           if sum(of z:)=200 then output;
       %do j=1 %to 10;
          end;
       %end;
    run;
     
    %mend;
     
    %check
    les variables regroupées dans le tableau X sont vos valeurs prédéfinies. Dans mon exemple, on souhaite avoir toutes les combinaisons linéaires (enfin pas toutes... puisque les coefficients devant les valeurs prédéfinies ne peuvent être que 0, 1 ou 2...) qui conduisent à une valeur de 200.

    Attention quand même... si vous multipliez les valeurs prédéfinies et envisagez d'autres coefficients que 0, 1 ou 2, le temps d'exécution peut vite devenir monstrueux...

    Cordialement

    Sébastien Ringuedé

Discussions similaires

  1. Créer une matrice binaire
    Par sab113 dans le forum Langage
    Réponses: 3
    Dernier message: 01/02/2013, 22h38
  2. Réponses: 7
    Dernier message: 29/03/2009, 06h07
  3. Créer une matrice symétrique à partir de 3 colonnes
    Par vincent550 dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/04/2007, 13h35
  4. Créer une matrice en manipulant un vecteur
    Par bernard6 dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/04/2007, 11h34
  5. Créer une matrice k-diagonale
    Par Mathusalem dans le forum MATLAB
    Réponses: 6
    Dernier message: 29/05/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo