Ich bin auf der Suche nach einer Möglichkeit, einen normalen Variablenwert als Makrovariable in einem Datenschritt zu verwenden.Verwenden Sie eine Variable als Makro Variable Datenschritt
Zum Beispiel habe ich Makrovariable & statesList_Syphilis = AAA
und andere Makrovariable & statesList_Giardia = BBB
Und in einem Daten Schritt Ich habe eine Variable Germ Wich enthält zwei Zeilen: " Syphilis "und" Giardia ".
In meiner Daten Schritt muss ich AAA wenn Iteration über der ersten Reihe, wenn Germ = "Syphilis"
und BBB wenn iterieren der zweiten Reihe finden, wenn Germ = "Giardia"
ein Versuch, würde so aussehen
%let statesList_Syphilis = AAA;
%let statesList_Giardia = BBB;
data test;
set mytablewithgerms; * contains variable Germ ;
* use germ and store it in &germ macro variable ;
* something like %let germ = germ; or call symput ('germ',germ);
* I want to be able to do this;
xxx = "&&statesList_&germ"; * would give xxx = "AAA" or xxx = "BBB";
* or this;
&&statesList_&germ = "test"; * would give AAA = "test" or BBB = "test";
run;
ich glaube nicht, dass dies möglich ist, aber ich dachte, ich sicher zu sein, nur fragen würde.
Danke!
EDIT (Fragen in den Kommentaren Folgen, ich hinzufüge Kontext zu meinem speziellen Problem, aber ich fühle mich ist dies die Dinge noch komplizierter zu machen):
Dies war ein Versuch, das Problem zu vereinfachen.
In Wirklichkeit AAA und BBB sind lange Listen von Wörtern wie
"asymptomatic_1 fulminant_1 chronic_1 chronic_1 fatalFulminant_1 hepatocellular_1 compensated_1 hepatocellular_2 decompensated_1 fatalHepatocellular_1 fatalHepatocellular_2 fatalDecompensated_1"
Und ich möchte nicht in einer Variablen diese lange Zeichenfolge speichern, ich will jedes Wort davon iterieren String in einer do-Schleife mit so etwas wie:
%do k=1 %to %sysfunc(countw(&&statesList_&germ));
%let state = %scan(&&statesList_&germ, &k);
* some other code here ;
%end;
EDIT2:
hier ist eine vollständigere Sicht auf mein Problem:
%macro dummy();
data DALY1;
* set lengths ;
length Germ $10 Category1 $50 Category2 $50 AgeGroupDALY $10 Gender $2 value 8 stateList$999;
* make link to hash table ;
if _n_=1 then do;
*modelvalues ----------------;
declare hash h1(dataset:'modelData');
h1.definekey ('Germ', 'Category1', 'Category2', 'AgeGroupDALY', 'Gender') ;
h1.definedata('Value');
h1.definedone();
call missing(Germ, Value, Category1, Category2);
* e.g.
rc=h1.find(KEY:Germ, KEY:"ssssssssss", KEY:"ppppppppppp", KEY:AgeGroupDALY, KEY:Gender);
*states ---------------------;
declare hash h2(dataset:'states');
h2.definekey ('Germ') ;
h2.definedata('stateList');
h2.definedone();
end;
set DALY_agregate;
put "°°°°° _n_=" _n_;
DALY=0; * addition of terms ;
rc2=h2.find(KEY:Germ); * this creates the variable statesList;
put "statesList =" statesList;
* here i need statesList as a macro variable,;
%do k=1 %to %sysfunc(countw(&statesList)); *e.g. acute_1 asymptomatic_1 ...;
%let state = %scan(&statesList, &k);
put "=== &k &state";
&state = 1; * multiplication of terms ;
* more code here;
%end;
run;
%mend dummy;
%dummy;
EDIT3:
Die Eingabedatei sieht wie folgt aus
Germ AgeGroup1 AgeGroup2 Gender Cases Year
V_HBV 15-19 15-19 M 12 2015
V_HBV 15-19 15-19 M 8 2016
V_HBV 20-24 20-24 F 37 2011
V_HBV 20-24 20-24 F 46 2012
V_HBV 20-24 20-24 F 66 2013
Die Ausgabe-Datensatz in der Zeichenfolge enthaltenen Variablen hinzufügen wird definiert durch die Makrovariable, die von der deutschen abhängt.
z.B. für V_HBV wird es diese Variablen erstellen: asymptomatic_1 fulminant_1 chronic_1 chronic_1 fatalFulminant_1 hepatocellular_1 compensated_1 hepatocellular_2 decompensated_1 fatalHepatocellular_1 fatalHepatocellular_2 fatalDecompensated_1
Wie viele Beobachtungen hat Ihr Datensatz? Sie könnten dies mit zwei Datensätzen lösen, eine Makrovariable für jede Beobachtung in der ersten Datenkette erstellen und dann über alle Makrovariablen in einer Makroschleife im zweiten Datensatz iterieren, aber dies macht nur Sinn, wenn Ihre Daten nicht zu groß sind. Auch das ist nur ein vereinfachtes Beispiel, denn sonst könnte man das ohne eine Makrovariable lösen? – kl78
Können Sie Beispiel "haben" und "wollen" Datensätze zur Verfügung stellen? Ich nehme an, Sie haben einen breiten Datensatz mit vielen Zuständen in jeder dieser zwei Reihen? – superfluous
Aktualisierte die Frage mit mehr Code und Perspektive. –