8
votes

SAS: Réorganiser la commande de champ dans l'étape de données

dans SAS 9, comment puis-je dans une étape de données simple, réorganiser la commande dans le champ.

Title  Salary  Name
Chief  40000   A
Chief  45000   B

sas

1 commentaires

Pourriez-vous ajouter un peu plus d'informations sur la raison pour laquelle vous voulez faire cela? Si c'est pour le formatage / l'impression, je pense que vous pouvez gérer cela avec Proc Print ...


4 Réponses :


10
votes

Certains googling rapides m'ont donné cette méthode: xxx

d'ici: http://analytics.ncsu.edu/ssug/2002/ps12.pdf


0 commentaires

5
votes

Si vous avez un très grand nombre de variables dans votre ensemble de données, il est parfois plus facile d'utiliser une instruction SQL au lieu d'un DataStep. Cela vous permet de répertorier les variables dont la commande que vous vous souciez et utilise un caractère générique pour conserver tout le reste.

proc sql noprint;
  create view set2 as
  select title, *
  from set1;
quit;

** OR;

data set2 / view=set2;
  retain title salary name;
  set set1;
run;


1 commentaires

Juste pour être clair, toutes les méthodes énumérées dans le lien fourni par @mcpeterson ont également le comportement que vous attribuez à ProC SQL-One n'a pas besoin de spécifier une commande de toutes les variables dans l'ensemble de données, que celles d'intérêt. Les autres sont toujours conservés (sauf indication contraire ailleurs).



3
votes

Vous pouvez également utiliser une instruction Informat pour le faire - il n'est pas nécessaire de spécifier des informateurs. Je soupçonne que cela est légèrement plus efficace qu'une déclaration de retenue équivalente, car elle permet à SAS d'initialiser les valeurs à manquer plutôt que de les récupérer de la ligne précédente. En pratique, la différence est minimale et vous avez également la possibilité d'utiliser une vue.

data set2;
  informat title salary name;
  set set1;
run;


3 commentaires

SAS ne fonctionne pas comme vous le pensez, dans la mesure où conserver VS ne conserve pas. Conserver ne récupère pas les valeurs de la ligne précédente; Il provoque en fait que SAS ne définit pas une variable à manquer entre les itérations, donc s'il y avait une différence dans la manière dont cela et la solution informatisé fonctionnaient, ce serait plus rapide, pas plus lent. Je suppose qu'il y a une différence de zéro entre les deux, car SAS ferait exactement la même chose dans les deux cas (définir la variable dans le PDV et l'arrêt.)


Oui, j'ai eu ce peu mal. Cependant, je pense qu'il y a toujours un cas pour Informat contre Conserver, car le premier risque moins de causer tout comportement non intentionnel, par exemple. Si le jeu de données source contient des valeurs manquantes.


Je suis provisoirement d'accord avec vous, en attendant que je me souviens pourquoi il est que presque personne n'utilise Informat (ou format ) de cette façon, et presque tout le monde utilise retenir , malgré le potentiel de conséquences inattendues ...



1
votes

Vous pouvez utiliser tout ce qui initialise le PDV avec des variables dans l'ordre de votre choix ( Attrib , tableau , FORMAT , INFORMAT , longueur , conserver ).

Source: Ce SAS Note: http://support.sas.com/kb /8/395.html


0 commentaires