Python sas中的双向查找

Python sas中的双向查找,python,sas,Python,Sas,假设我有一个(9000x9000)表,如下所示: zone 304 305 306 307 308 ... 001 1 2 8 9 12 ... 002 6 8 3 7 1 ... 003 4 8 1 12 9 ... 004 2 7 3 16 34 ... ... 主数据表如下所示: package # weight origin de

假设我有一个(9000x9000)表,如下所示:

 zone 304  305  306  307  308 ...

  001   1    2    8    9   12 ...
  002   6    8    3    7    1 ...
  003   4    8    1   12    9 ...
  004   2    7    3   16   34 ...
  ...
主数据表如下所示:

  package #    weight    origin    destination    zone
       123      2oz       004          305        7 to be inputted here
        .
        .
        .
我需要SAS输出对应于给定有序对的“区域”。我担心唯一的方法是使用某种类型的循环。例如,在上面的示例中,起始值来自行标签,目标值来自列标签。交点是我需要指定给“区域”的目标值

使用python数据争用库的解决方案也可以

此外,9000x9000表是一个Excel CSV文件

我的方法:

  • 将数据集加载到临时数组(9000x9000)中,然后根据需要查找每个元素。可能是内存密集型的,但9000*9000对我来说似乎足够小了
  • 另一种安全的方法是将数据转换为长格式:

    Key1 Key2 Value  
    001 304 1  
    001 305 2
    ...
    
  • 然后,在任何语言中,它都会变成一个连接/合并而不是查找

  • 您还可以使用PROC IML,它将数据作为矩阵加载,然后您可以使用索引进行访问 SAS中也有通过合并(主要使用VVALUEX)执行此查找的方法

    如果不知道您将如何使用它,我无法提供更多信息

    编辑:添加了第三个选项,即IML。基本上有很多方法可以做到这一点,最好的方法取决于你计划如何整体使用它

    编辑2: 1.将第一个数据集导入SAS(PROC导入) 2.使用PROC转置进行转置 3.按源-目的地合并data step或PROC SQL,这将是直接的。在这一点上,它实际上是一个具有2个键的标准查找

    我的方法:

  • 将数据集加载到临时数组(9000x9000)中,然后根据需要查找每个元素。可能是内存密集型的,但9000*9000对我来说似乎足够小了
  • 另一种安全的方法是将数据转换为长格式:

    Key1 Key2 Value  
    001 304 1  
    001 305 2
    ...
    
  • 然后,在任何语言中,它都会变成一个连接/合并而不是查找

  • 您还可以使用PROC IML,它将数据作为矩阵加载,然后您可以使用索引进行访问 SAS中也有通过合并(主要使用VVALUEX)执行此查找的方法

    如果不知道您将如何使用它,我无法提供更多信息

    编辑:添加了第三个选项,即IML。基本上有很多方法可以做到这一点,最好的方法取决于你计划如何整体使用它

    编辑2: 1.将第一个数据集导入SAS(PROC导入) 2.使用PROC转置进行转置 3.按源-目的地合并data step或PROC SQL,这将是直接的。在这一点上,它实际上是一个具有2个键的标准查找

    您可以使用它,它有一个内置的函数来读取excel文档:

    因此,对于此文件:

    输出:

    67
    
    您可以使用,它有一个内置函数来读取excel文档:

    因此,对于此文件:

    输出:

    67
    

    如果使用矩阵,查找时间是恒定的,尽管它有很大的内存开销。如果将CSV作为SAS数据集读取,为什么不能使用“select from where=”运行PROC SQL?如果使用矩阵,查找时间是恒定的,尽管它有很大的内存开销。如果将CSV作为SAS数据集读取,为什么不能使用“select from where=”运行PROC SQL“select from where=“?我要将输出值保存到csv文件中的另一列如何将数据转换为您建议的选项2?最左边的列和顶行有一个通用名称”区域3“。但是您需要查找的值来自哪里?这是你问题中遗漏的部分。您可以使用PROC transpose:)转换数据。有序对的值将来自OPI中引用的主数据表。我要将输出值保存到csv文件中的另一列。我如何转换数据,使其看起来像您建议的选项2?最左边的列和最上面的行有一个共同的名称“Zone3”。但是您需要查找的值来自哪里?这是你问题中遗漏的部分。您可以使用PROC transpose:)对数据进行转置。有序对的值将来自OPS中引用的主数据表。如果我将文件保存为csv,这将起作用,如果列/行标签不是整数,但stringsIt将起作用,只要您没有重复的列/行名称。Pandas确实有一个
    read_csv()
    函数,如果我将文件另存为csv,该函数也会起作用,如果列/行标签不是整数,但stringsIt也会起作用,只要没有重复的列/行名称。熊猫也有一个
    read\u csv()
    功能