Question

Existe-t-il une méthode inhérente à SAS pour trouver l'ordre de tri d'un jeu de données?

Était-ce utile?

La solution

Comme le dit Sassy, ??SAS ne peut savoir si un jeu de données est trié que si le tri a été effectué ou si vous lui indiquez explicitement l'ordre de tri. Si vous n’avez suivi aucune de ces étapes, vous ne saurez pas si les données sont dans un ordre quelconque.

J'aime l’idée d’AFHood d’essayer de la trier. Si SAS sait que le tri est ainsi effectué, il vous le dira et ne le fera plus.

NOTE: Input data set is already sorted, no sorting done

Voici d'autres idées pour étudier le tri des données ... Amusez-vous.

Si vous voulez juste le regarder manuellement, vous pouvez utiliser proc contents data = libname.data; run; et regardez la sortie. Il existe un attribut appelé trié. Si vous utilisez le mode fenêtré, vous pouvez cliquer avec le bouton droit de la souris sur le jeu de données dans l’explorateur et choisir les propriétés, puis cliquer sur l’onglet Détails pour afficher les valeurs triées.

Pour une approche de test programmatique, vous pouvez utiliser un ensemble de données de sortie à partir du contenu de la procédure. Les colonnes triées et triées par colonnes vous indiqueront si le jeu de données est trié et la variable par laquelle il est trié. Essayez-le en exécutant le code ci-dessous.

/* In an unsorted data set, proc contents will give missing values
   for the sorted and sortedby columns of its output data */
proc contents data=sashelp.class out=class_contents noprint;run;
proc print data=class_contents;
  var memname name sorted sortedby;
run;

/* Now sort and observe the changes in the sorted and sortedby columns */
proc sort data=sashelp.class out=class_sorted; by name;run;
proc contents data=class_sorted out=class_sorted_contents;run;
proc print data=class_sorted_contents;
  var memname name sorted sortedby;
run;`enter code here`

Autres conseils

Si les données ont bien été "triées", oui. Il y a un petit tableau concernant les informations de tri au bas de la sortie produite par le contenu de proc.

Les informations qui ont été créées avec des données qui étaient déjà dans un ordre de tri peuvent ne pas être associées à ces informations et vous devrez commencer à explorer les données pour déterminer leur ordre.

Vous pouvez utiliser la fonction Attrc .

Docs sur http://support.sas .com / onlinedoc / 913 / getDoc / fr / lrdict.hlp / a000147794.htm

Cela ressemble à ce qui suit

data _null_;
   dsid=open("work.a","i");
   sortby=attrc(dsid,"SORTEDBY");
   put  sortby=;
   rc=close(dsid);
run;

Je suppose que le problème que vous résolvez consiste à déterminer si un jeu de données doit être trié de manière programmatique. La meilleure solution que nous ayons utilisée est simplement d’utiliser la méthode proc en cas de doute.

Bien sûr, vous pourriez dire qu’il s’agit de frais généraux et de traitement .. Eh bien oui, mais si le jeu de données est déjà trié correctement, proc triez-le avec le savoir et laissez votre code avancer avec un traitement minimal. Il a le " si trié puis passez à " logique intégrée.

Si ce n'est pas le problème que vous essayez de résoudre, élaborez et on verra si nous pouvons vous aider.

Si sas n'a pas trié les données, mais vous pensez qu'elles pourraient être triées, vous pouvez essayer de les traiter comme si elles étaient triées et de gérer les erreurs qui pourraient en résulter ou non.

* This works, swap some values to see how an error looks;
data foo;
input height;
cards;
1
2
3
4
;
run;

data _null_;
set foo;
by height;
run;

Les états d'erreur peuvent être détectés et réinitialisés dans une macro, mais cette approche risque de devenir compliquée. Plus d'informations sur cette ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top