首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用哈希表和数组来创建查找表?

如何使用哈希表和数组来创建查找表?
EN

Stack Overflow用户
提问于 2019-04-20 18:58:08
回答 1查看 63关注 0票数 0

问题是如何计算最低费用。我有一个名为busfares的数据集,其中包含不同的车站代码、目的地代码和票价类型。非常感谢你们所有人,如果你们愿意花一些时间在我的问题上。

数据集如下所示

代码语言:javascript
复制
srt_na srt srt_id dest_na dest dest_id adult_pri student_pri child_pri eldery_pri
abcde  abc  1     abcde    abc   1        0       0           0         0
abcde  abc  1     bbcde    bbc   2        5       4           4         1
abcde  abc  1     cbcde    cbc   3        7       5           5         1
abcde  abc  1     dbcde    dbc   4        7       5           5         1
abcde  abc  1     ebcde    ebc   5        10      6           6         1
                                  .
                                  .
                                  .
abcde  abc  1     ooooo    ooo   91       30.5    20          20        1
bbcde  bbc  2     abcde    abc    1       5       4           4         1
bbcde  bbc  2     bbcde    bbc    2       0       0           0         0
                                  .
                                  .
                                  .
ooooo  ooo  91    abcde    abc    1       30.5    20          20        1
ooooo  ooo  91    bbcde    bbc    2       30.5    20          20        1
                                  .
                                  .
                                  .
ooooo  ooo  91    ooooo    ooo    91      0       0           0         0

第一个问题是如何使用hash对象构建查找表,如下所示:

代码语言:javascript
复制
srt  srt_na srt_id
abc   abcde   1
bbc   bbcde   2
cbc   cbcde   3
dbc   dbcde   4
ebc   ebcde   5

第二个问题是如何使用four数组来构建不同类型票价的查找表?表格应该是这样的。行和列代表不同的电台名称,例如row1代表abc,column1也代表abc。

代码语言:javascript
复制
adult   1   2   3   4   ...
1       0   5   7   7   ...
2       5   0   10  10  ...
3       7   10  0   5   ...
4       7   10  5   0   ...
EN

回答 1

Stack Overflow用户

发布于 2019-04-21 01:03:08

实际上,你最好让你的原始表变得更高更窄。将多个票价类型列转换为多行。例如,您可以创建fare_type (具有类似‘成人’等值)和For。

您可以使用PROC TRANSPOSE来转换当前的数据集。

代码语言:javascript
复制
proc transpose data=lookup name=fare_type out=lookup2(rename=(col1=fare));
  by srt_na dest_na srt_id dest_id notsorted ;
  var adult_pri student_pri ;
run;

因此,如果您的客户数据看起来像这样:

代码语言:javascript
复制
data cust ;
  input cust srt_na :$8. dest_na :$8. fare_type :$32. ;
cards;
1 aaa bbb adult_pri
2 bbb ccc student_pri
;

然后,您可以通过将您的客户请求数据与从车站到车站和票价类型的票价数据进行匹配来计算票价。

代码语言:javascript
复制
proc sql;
   create table want as 
      select a.*,b.fare 
      from cust a
      left join lookup2 b
      on a.str_na = b.str_na and a.dest_na = b.dest_na
      and a.fare_type = b.fare_type
   ;
quit;

如果你确实想创建一个散列对象,你可以用它来找到价格,不需要数组(矩阵)。同样,让查找表更高会更好。

代码语言:javascript
复制
data want;
  set cust;
  fare=.;
  if _n_=1 then do;
    declare hash h(dataset:'lookup2');
    h.definekey('srt_na','dest_na','fare_type'); 
    h.definedata('fare');
    h.definedone();
  end;
  h.find();
run;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55772828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档