2017-09-28 11 views
-2

Uning sas guide d'entreprise pour interroger la base de données (20 millions d'enregistrements dans un ensemble de données) J'essaie d'utiliser le script (proc sql) pour obtenir nombre d'enregistrements (en utilisant IncidentID variables) dans les incidents de table avec années entre Incident_date et recorded_date est supérieure à 1 anSAS (proc sql) compte nombre d'enregistrements si différence entre deux variables de date supérieur à 3 ans

Je tente aussi d'exporter tous les enregistrements où incident_date - recorded_date> = 3 années

Les données des incidents de table :

IncidentID Date de l'incident enregistré_date 1001 01/01/2016 01/01/2017 1002 10/12/2015 10/12/2015 1005 01/01/2001 01/01/2005 2007 01/01/1999 07/01/2015 999 05/10/2014 10/10/2016

PROC SQL; 
    create table incidentdata as 
    SELECT incidentID, name, reported_date, Incident_date 
     from libraryname.Incidents 
     where intck('year',reported_date, incident_date, 'C') >= 1; 
     quit; 

sortie nécessaire: 1. peut Comptez le cas dans le tableau avec recorded_date - incident_date> = 1 an 2. Sélectionnez tous les cas avec recorded_date - incident_date> = 1 an

Ceci est le code pour le moment:

vous plaît aider

+0

Je sais que ce qui suit va me faire la différence au cours des années, mais comment puis-je utiliser dans une clause where pour obtenir ce que je veux? Par exemple. années = intck ('année', '01jan2009'd,' 01jan2010'd); –

+0

Sur ce site, vous êtes tenu de fournir des exemples de données, la sortie désirée et nous montrer ce que vous avez déjà essayé. Vous pouvez également modifier votre question pour ajouter plus d'informations plutôt que de commenter votre propre question. – user2877959

Répondre

0
where intnx('year',date2,-3,'same') >= date1 

ou

where intck('year',date1, date2, 'C') >= 3 
+0

cela ne semble pas fonctionner car je ne suis pas sûr de ce que «C» devrait sur ce que vous avez dit ci-dessusPROC SQL; compte SELECT (identificateur d'incident distinct) AS CNT_incidents, où intck ('année', date 2, date 1, 'C')> = 3 FROM Libename..datasetname; QUITTER; –

+0

Cela fonctionne. '' C '' est supposé être '' C''. C'est un argument de la fonction 'intck'. Le problème ici est que vous n'avez pas les connaissances SQL les plus basiques. La clause 'where' vient après la clause' from'. – user2877959

+0

De plus, vous devez ajouter une clause 'group by' si vous voulez utiliser une fonction d'agrégat comme' count' et ce n'est pas ainsi que vous devriez compter des observations distinctes. Si vous modifiez votre question avec le code que vous utilisez, quelqu'un peut probablement vous aider davantage. – david25272