2017-08-18 3 views
0

Ich habe mehrere Monate lang Data Mining betrieben und eine Technik entwickelt, um Informationen für ein Unternehmen herauszufinden. Ich habe Probleme damit, die Daten in eine angemessene und wertvolle Präsentation darüber zu bringen, wie man Informationen in SAS zusammenfasst. Ich habe 3 Fragen.Wie erstelle ich diese Case-Anweisungen in proc sql und appendiere ich, wenn Tabellen überschrieben werden?

1) Wie kann ich in proc sql sagen: "Wenn matched_by_t2> b2_c2 dann in neue Spalte hinzufügen "no bueno"

2) ist es eine Möglichkeit zu haben "(BC_C2/original_count)%" Wie würde ich Fügen Sie das Prozentzeichen ein

3) auch wenn ich diese Abfrage mehrmals für eine Liste von Datensätzen ausführen, wie bekomme ich diese neuen Tabellen mit dem gleichen Namen "e_data_unmatched" anhängen jedes Mal, wenn eine neue Tabelle erstellt und überschrieben wird Ich zeige zwei Zeilen jedes Mal, wenn das Programm ausgeführt wird, die Tabellen überschrieben werden, also möchte ich sicherstellen, dass jedes Mal, wenn die Schleife ausgeführt wird, die neuen Datensätze an die Tabelle anhängen, anstatt zu überschreiben 1http://imgur.com/bzLefXy

Vielen Dank!

proc sql; 
create table wanted as 
select t1.occurences as original_count 
     ,t2.occurences as matched_by_T1 
     ,t3.occurences as matched_by_T2 
     ,t2.occurences+t3.occurences as B2_C2 
     ,t4.occurences as not_matched 
     ,t5.occurences as matched_by_t2 
from (select count(*) as occurences from query_for_reports1) t1 
    ,(select count(*) as occurences from query_for_reports1 where edsys is not null) t2 
    ,(select count(*) as occurences from e_data_unmatched where ip is not null) t3 
    ,(select count(*) as occurences from WORK.E_DAT_UNMATCHED where IpS= .) t4 
    ,(select count(*) as occurences from work.Append_table13) t5 
; 
quit; 

Antwort

1
1) Add new column "no bueno" in sql set value based on conditiong " If matched_by_t2 > b2_c2" 
2) concatenate percentage sign 
proc sql; 
create table wanted as 
select t1.occurences as original_count 
     ,t2.occurences as matched_by_T1 
     ,t3.occurences as matched_by_T2 
     ,t2.occurences+t3.occurences as B2_C2 
     ,t4.occurences as not_matched 
     ,t5.occurences as matched_by_t2, 
case when t3.occurences> t5.occurences then 0 
else 1 end as no_bueno, 
CAST(((t2.occurences+t3.occurences)/ t1.occurences) as nvarchar(5)) +'%' 
from (select count(*) as occurences from query_for_reports1) t1 
    ,(select count(*) as occurences from query_for_reports1 where edsys is not null) t2 
    ,(select count(*) as occurences from e_data_unmatched where ip is not null) t3 
    ,(select count(*) as occurences from WORK.E_DAT_UNMATCHED where IpS= .) t4 
    ,(select count(*) as occurences from work.Append_table13) t5 
; 
quit; 
+0

Mehrere Dinge sind hier falsch. Zum einen ist Ihre "Cast" -Zeile keine gültige SAS-Syntax (nicht mindestens in dieser proc sql). Zweitens scheint sie den Wert "no bueno" in einer Spalte zu haben, nicht in einer Spalte, die "no bueno" genannt wird. Zu guter Letzt haben Sie ihrem Code etwas hinzugefügt, ohne ihre Fehler zu korrigieren (z. B. doppelte 'matched_by_t2'-Spalten in select-Anweisung); Das bedeutet, dass dieser Code auch dann nicht funktioniert, wenn Ihre Ergänzungen korrekt waren. – user2877959

+0

@ user2877959 gibt es eine Möglichkeit zu sagen, seine Antwort war richtig für 50% meiner Frage? Was ist Stapel Etikette? –

+0

Ich würde sagen, dass diese Antwort für 33% Ihrer Frage richtig war, vorausgesetzt, er war in seinem Verständnis Ihres ersten Punktes richtig. Ich nehme an, dass die Stack-Philosophie darin besteht, dass Sie eine Antwort aufwerten, die nützlich ist und/oder eine angenommene Antwort als Antwort markieren, die Ihre Frage vollständig beantwortet. – user2877959

0

auf Ihre Abfrage zu erstellen und versuchen, alle drei Fragen zu beantworten:

1) Wenn Sie eine neue Spalte den Wert „no bueno“ enthalten soll, wenn die Bedingung erfüllt ist, die Sie hinzufügen die folgende Spalte zu Ihrer select-Klausel:

case 
    when matched_by_t2>t2.occurences+t3.occurences then "no bueno" 
end as new_column_1 

Wenn aber, was Sie wollen ein Flag-Typ-Wert in einer Spalte ist keine bueno genannt, können Sie @ Vorschlag des Trushna verwenden

2) Es gibt zwei Möglichkeiten, dies zu tun. Sie können entweder speichern Sie den Wert als Zeichenvariable mit dem Prozentzeichen in ihm fest einprogrammiert:

catx(' ',(t2.occurences+t3.occurences)/t1.occurences,'%') as new_column_2 

oder Sie den Wert als numerische Variable speichern können und Anzeige es mit einem Prozentzeichen mit einem Format:

(t2.occurences+t3.occurences)/t1.occurences as new_column_2 format=percent. 

3) eine Möglichkeit, um diese Abfrage zu verwenden, dessen Ausgang mit einer Tabelle wird jedes Mal hinzuzufügen, eine insert into Abfrage verwendet anstelle ein create table:

proc sql; 
insert into wanted 
select [...] 
; 
quit; 

Bedenken Sie, dass die Tabelle für einen insert into erfolgreich sein muss. In Ihrem Fall müssten Sie die create table Syntax das erste Mal und dann die insert into syntax jedes Mal verwenden.

Ich muss darauf hinweisen, dass, obwohl ich nicht bewusst Ihren Workflow noch den Kontext, in dem Sie dies tun, die Art, wie Sie versuchen, dies zu erreichen, ist sehr suboptimal und Sie möchten vielleicht überdenken verarbeiten.

Verwandte Themen