我有两个数据集。第一个数据集在变量“机场”中有机场代码(JFK,LGA,EWR)。第二个数据集包含世界上所有主要机场的列表。该数据集有两个变量' faa'持有FAA代码(如JFG,LGA,EWR)和' name'持有机场的实际名称(John.F Kennedy,Le Guardia等)。
我的要求是在第一个数据集中创建值标签,这样机场的实际名称就会出现,而不是机场代码。我知道我可以使用自定义格式来实现这一目标。但是,我可以编写可以读取唯一机场代码的SAS代码,然后从其他数据集中获取名称并自动创建值标签吗?
PS:其他方面,我看到的唯一选择是使用MS Excel获取数据集1中唯一的FAA代码列表,然后使用VLOOKUP获取机场名称。然后通过列出每个唯一的FAA代码和机场名称来创建一个自定义格式。答案 0 :(得分:0)
首先,考虑它是否真的是一种需要的格式。例如,您可以只执行左连接以从table2(FAA-Name表)中检索列(机场)名称。
无论如何,我相信下面的宏可以解决这个问题:
创建辅助表:
data have1;
input airport $;
datalines;
a
d
e
;
run;
data have2;
input faa $ name $;
datalines;
a aaaa
b bbbb
c cccc
d dddd
;
run;
创建格式的宏:
%macro create_format;
*count number of faa;
proc sql noprint;
select distinct count(faa) into:n
from have2;
quit;
*create macro variables for each faa and name;
proc sql noprint;
select faa, name
into:faa1-:faa%left(&n),:name1-:name%left(&n)
from have2;
quit;
*create format;
proc format;
value $airport
%do i=1 %to &n;
"&faa%left(&i)" = "&name%left(&i)"
%end;
other = "Unknown FAA code";
run;
%mend create_format;
%create_format;
申请格式:
data want;
set have1;
format airport $airport.;
run;
答案 1 :(得分:0)
我认为"价值标签"是SPSS术语。看起来你想要创建一个格式。只需使用查找表为PROC FORMAT创建输入数据集。
所以如果你的第二个表看起来像这样:
data table2;
length FAA $4 Name $40 ;
input FAA Name $40. ;
cards;
JFK John F. Kennedy (NYC)
LGA Laguardia (NYC)
EWR Newark (NJ)
;
您可以使用此代码将其转换为PROC FORMAT可用于创建格式的数据集。
data fmt ;
fmtname='$FAA';
hlo=' ';
set table2 (rename=(faa=start name=label));
run;
proc format cntlin=fmt lib=work.formats;
run;
现在,您可以将该格式与其他数据一起使用。
proc freq data=table1 ;
tables airport ;
format airport faa. ;
run;