Voici des valeurs séparées par des virgules comme suit:
%macro sorts (values=); %let val = %sysfunc(countw(&values.,',')); %do i=1 %to &val.; %let str1= %scan(&values.,&i.,','); %do j=&i.+1 %to &val.; %let seq = %bquote( ); %let str2= %scan(&values.,&j.,','); %if &str1. < &str2. %then %do; %let tmp = &str1.; %let str1 = &str2.; %let str2 = &tmp.; %let seq = &str1.; %end; %put &str1.; %end; %end; %mend sorts; %sorts(values=%str(15,30,16,8,86,98,6));
3 Réponses :
J'ai simplifié votre logique.
Cela traite correctement les liens correctement. p> juste une suggestion, lors de la gestion du code comme celui-ci, générez d'abord le pseudo-code ou votre logique, puis Créez le code. La logique utilisée ici est similaire à ce que vous apprendriez dans un cours de programmation de première année de la manière de travailler et ne devrait vraiment jamais être utilisé dans le code actuel. Ceci est uniquement utile en tant qu'exercice de programmation. P> p>
Envelopper la fonction de données String String Littéral Fonction Arguments dans devrait être P> % STR () code> au lieu de
'' code>
575 %put %sortn(values=%str(15,30,16,8,86,98,6,1));
1,6,8,15,16,30,86,98
Il est assez facile de faire dans une étape de données. Fonctionne mieux si vous connaissez le nombre d'éléments de la liste. Exemple: afin de convertir ceci en macro profite simplement de l'option SYSPARM et de la fonction Dosuch (). P> 174 %put %sort(15, 30, 16, 8, 86, 98, 6, 6, 100, -9);
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
-9,6,6,8,15,16,30,86,98,100
175 %put %sort(5 6 3 10);
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
3,5,6,10
Pourquoi les limitations d'aucune étape de données et doivent être macro? S'expliquer comme ça est inefficace. Vous n'avez pas comptabilisé des liens cependant, c'est un problème pour les démarreurs.
Publiez la logique que vous pensez que vous utilisez pour trier ici ou vos commentaires sur ce que vous pensez que le code fait ici. Je passe du temps difficile à suivre votre logique.