使用其他数据集

时间:2018-02-14 07:10:43

标签: sas

我有两个数据集。第一个数据集在变量“机场”中有机场代码(JFK,LGA,EWR)。第二个数据集包含世界上所有主要机场的列表。该数据集有两个变量' faa'持有FAA代码(如JFG,LGA,EWR)和' name'持有机场的实际名称(John.F Kennedy,Le Guardia等)。

我的要求是在第一个数据集中创建值标签,这样机场的实际名称就会出现,而不是机场代码。我知道我可以使用自定义格式来实现这一目标。但是,我可以编写可以读取唯一机场代码的SAS代码,然后从其他数据集中获取名称并自动创建值标签吗?

PS:其他方面,我看到的唯一选择是使用MS Excel获取数据集1中唯一的FAA代码列表,然后使用VLOOKUP获取机场名称。然后通过列出每个唯一的FAA代码和机场名称来创建一个自定义格式。

2 个答案:

答案 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;