2017-10-19 16 views
0

Je suis nouveau à SAS et essayer de faire le prochain: J'ai deux tables (utilisateurs & avis) connecté via user_id.SAS vérifier si l'année est IN caractère

J'ai fusionné les deux via user_id. Il y a deux variables que je veux utiliser:

  1. "date" (de l'examen enregistrées au format MMDDYY10..)
  2. "élite" (année un utilisateur était d'élite, enregistré en tant que personnage )

Elite a des formes différentes (exemples):

  • cellule vide
  • 2012,2015,2017
  • 2012: 2017

Comment puis-je vérifier si un utilisateur était d'élite quand il a écrit l'examen?

Merci à l'avance, Peyo

+0

Est-ce que '2012: 2017' signifie que l'utilisateur était d'élite pour toutes les années de 2012 à 2017 inclus? – user667489

Répondre

0

Cela couvre le cas où un an ne figure pas dans le texte de elite mais est inclus dans une gamme:

data test_cases; 
input date yymmdd10. + 1 elite $32.; 
format date yymmdd10.; 
infile cards missover; 
cards; 
2012-01-01 2012,2015,2017 
2012-01-01 2012:2017 
2013-01-01 2012:2017 
2012-01-01 
2011-01-01 2012,2015,2017 
2011-01-01 2012:2017 
; 
run; 

data example; 
    set test_cases; 
    article_year = put(year(date),4.); 
    if index(elite,':') = 0 then elite_flag = index(elite,article_year); 
    else elite_flag = substr(elite,1,4) <= article_year <= substr(elite,6,9); 
run; 
+0

Merci! Maintenant je comprends! – Pello

0

Vous pouvez utiliser la fonction YEAR pour extraire l'année de date, puis utilisez la fonction PUT pour le convertir en caractère et enfin la fonction INDEX pour rechercher la liste elite:

if index(elite,put(year(date),4.)) then ... 

La condition sera vraie lorsque la fonction d'indexation trouve l'année date dans la variable elite.