SAS: Comment dois-je point pour une observation spécifique de la valeur?
Je suis très nouveau pour les SAS et je suis à essayer de comprendre certaines choses de base disponibles dans d'autres langues.
J'ai une table
ID Number
-- ------
1 2
2 5
3 6
4 1
Je voudrais créer une nouvelle variable où la somme de la valeur d'une observation de Numéro à chaque d'autres observations, comme
Number2 = Number + Number[3]
ID Number Number2
-- ------ ------
1 2 8
2 5 11
3 6 12
4 1 7
Comment puis-je obtenir la valeur de la troisième observation, de Nombre et de l'ajouter à chaque observation de Number
dans une nouvelle variable?
Avez-vous des SAS/IML ou tout simplement de la base SAS?
OriginalL'auteur Morten | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
Je vais commencer par ce qui suggère que la Base SAS ne fonctionne pas vraiment de cette façon, normalement, ce n'est pas qu'il ne peut pas, mais normalement, vous pouvez résoudre la plupart des problèmes sans pointant sur une ligne spécifique.
Alors que cette réponse permettra de résoudre votre explicite problème, ce n'est probablement pas quelque chose d'utile dans un scénario réel; en général, dans le monde réel, vous auriez un match clé ou un autre élément autre que "numéro de ligne" à combiner avec, et si vous l'avez fait, alors vous pourriez le faire de manière beaucoup plus efficace. Vous aussi probablement pourrait réorganiser la structure de données de manière à ce que cette opération plus commode.
Cela dit, l'exemple que vous donnez est trivial:
Si vous avez des SAS/IML (SAS matrice de la langue), qui est un peu similaire à R, alors c'est une histoire très différente à la fois dans votre probabilité pour effectuer cette opération et comment vous pouvez le faire.
Pour ce faire avec le Première d'observation, c'est beaucoup plus facile.
Je vais en dire un peu plus sur cette. SAS travaille sur un enregistrement par enregistrement, où chaque enregistrement est indépendamment traitées dans les DONNÉES de l'étape. (PROCs sur l'autre main peut ne pas se comporter de cette façon, même si beaucoup le font à un certain niveau). SAS, comme SQl et des bases de données similaires, n'est-ce pas reconnaître que toute la ligne est "premier" ou "deuxième" ou "n-ième"; toutefois, contrairement à SQL, il ne vous permettent de prétendre qu'il est basé sur le tri en cours. Le POINT= méthode d'accès aléatoire est une façon d'aller à ce sujet.
La plupart du temps, cependant, vous allez être en utilisant quelque chose dans les données afin de déterminer ce que vous voulez faire, plutôt que de certaines liées à la commande des données. Voici une façon pour vous de faire la même chose que le POINT= méthode, mais en utilisant la valeur de ID:
données souhaitées;
si n = 1 alors mis(where=(ID=3) renommer=nombre=number3);
ont ensemble;
nombre2=nombre+number3;
exécuter;
Que dans la première itération de données de l'étape (
_N_
=1) prend la ligne de where Id=3, et prend alors les lignes de ont dans l'ordre (vraiment il le fait:)Les Variables qui sont dans une instruction SET sont automatiquement conservés, de sorte NUMBER3 est automatiquement conservée (yay!!!) et pas la valeur manquante entre les itérations de données l'étape de la boucle. Tant que vous ne modifiez pas la valeur, il restera pour chaque itération.
Ce serait beaucoup plus facile, en fait. Tout d'abord, le SAS est Envisageable (essentiellement les binaires compilés), qui souvent ne dataset niveau des opérations; ETS est un module avec le temps de la série PROCs qui pourrait fonctionner (je n'ai pas d'expérience avec eux, mais c'est l'ensemble du module). Je vais ajouter un exemple de la première observation de rétention dans la réponse.
Grand - il a travaillé. Merci beaucoup!
OriginalL'auteur Joe
Il y a plusieurs façons de le faire; en voici une à l'aide de la SAS
POINT=
option:La
RETAIN
etDROP
états définir une variable temporaire pour contenir la valeur que vous souhaitez ajouter.RETAIN
signifie que la valeur est de ne pas être ré-initialisé à manquantes à chaque fois à travers les données de l'étape etDROP
signifie que vous ne souhaitez pas inclure cette variable dans les données de sortie définie.La
POINT=
option permet de lire une observation spécifique à partir d'un ensemble de données SAS. Le_n_=1
partie est un mécanisme de contrôle pour exécuter uniquement ce bout de code une fois, de l'affectation de la variableadder
à la valeur de la troisième observation.La section suivante lit le jeu de données d'une observation à un moment et ajoute applique vos changements.
Noter que le même ensemble de données est lu deux fois; une pratique SAS fonctionnalité.
OriginalL'auteur BellevueBob