2017-10-16 3 views
1

Ich habe ein Programm, das einen lokalen Skalar von durch Leerzeichen getrennten Variablennamen ausgibt. Ich muss das Programm zweimal an zwei Samples (gleich .dta) ausführen und die Union (die Namen der Kreuzungsvariablen, die in beiden Skalaren vorkommen) als neuen lokalisierten Skalar mit Leerzeichen (für die Eingabe in ein anderes Programm) speichern.Finde Vereinigung von zwei Variablen-Namen-Skalaren

Ich kann nicht herausfinden, wie man (pro Leerzeichen) teilt und oder das Auftreten von Variablennamen in jedem testet.

+0

Lokal sein und Skalar sein sind unterschiedlich. Ein Skalar kann einen temporären Namen haben, was nicht dasselbe ist. Eine andere Möglichkeit, Ihren Code zu zeigen und zu erklären, ist eine gute Idee. –

Antwort

5

Stata hat eine Reihe von erweiterten Makro-Funktionen auf Listen verwenden, die Sie mit help macrolists finden, wo Sie, dass A & B dem Schnittpunkt von A und B sehen gibt Wenn A = „ABCD“ und B = "bcfg", dann A & B = "bc".

Dies ermöglicht es Ihnen, so etwas zu tun:

clear 
scalar l1="vara varb varc" 
scalar l2="varc vard vare" 
local l1 = scalar(l1) 
local l2 = scalar(l2) 
local inter: list l1 & l2 
scalar inter="`inter'" 
scalar list inter 

Sie wandeln die Skalare zu den Einheimischen, bekommen ihre Vereinigung und wandeln die in einen Skalar. Es ist wahrscheinlich einfacher, den Code so zu ändern, dass er Locals anstelle von Skalaren verwendet, sodass Sie keine Conversions verarbeiten müssen.

+0

Stellar, danke, dass du darauf hingewiesen hast! – km5041

0

Ich bin mir nicht sicher, ob ich Ihre Frage perfekt verstehe. Wenn dies nicht die richtige Antwort ist, fügen Sie bitte ein Beispiel hinzu, mit dem wir arbeiten können.

Hier ist der Code, der zwei Leerzeichen-getrennte Makros überprüft und ihre Schnittmenge erhält, auch wenn es nicht die eleganteste ist, es sei denn, Ihre Makros sind riesig und sollten trotzdem ziemlich schnell sein.

local list1 first list here 
local list2 list two here 
local intersection 

foreach l1 in `list1' { 
    foreach l2 in `list2' { 
     // if they overlap, add to the intersection macro 
     if "`l1'" == "`l2'" { 
      local intersection `intersection' `l1' 
     } 
    } 
} 

mac list // show the macros stored currently in the do file 
Verwandte Themen