Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从一个SAS数据集中选择与另一个SAS数据集中至少一个值匹配的所有行_Sas - Fatal编程技术网

如何从一个SAS数据集中选择与另一个SAS数据集中至少一个值匹配的所有行

如何从一个SAS数据集中选择与另一个SAS数据集中至少一个值匹配的所有行,sas,Sas,我试图从一个CSV文件中读取100只股票/ETF的股票代码名。我有两个CSV文件,一个包含90天内所有股票/ETF的数据。第二个包含我感兴趣选择的100个股票/etf股票报价器的名称。下面是我的代码,WORK.ETFnames是一列数据集,其中包含我想从fulldata中选择的100个ETF名称。如何使用此名称列表正确选择所需数据。在WORK.FULLdata中,名称存储在名为“Ticker”的列中。我已经按类型(ETF或股票)对数据进行了排序,但不知道如何从这些表中选择我真正感兴趣的行。谢谢大

我试图从一个CSV文件中读取100只股票/ETF的股票代码名。我有两个CSV文件,一个包含90天内所有股票/ETF的数据。第二个包含我感兴趣选择的100个股票/etf股票报价器的名称。下面是我的代码,WORK.ETFnames是一列数据集,其中包含我想从fulldata中选择的100个ETF名称。如何使用此名称列表正确选择所需数据。在WORK.FULLdata中,名称存储在名为“Ticker”的列中。我已经按类型(ETF或股票)对数据进行了排序,但不知道如何从这些表中选择我真正感兴趣的行。谢谢大家!

PROC IMPORT OUT=WORK.Fulldata
   DATAFILE="/folders/myshortcuts/myfolder/q2_2012_all.csv"
   DBMS=CSV REPLACE;
   GETNAMES=YES;
   DATAROW=2;
RUN;

PROC IMPORT OUT = WORK.ETFnames
   DATAFILE = "/folders/myshortcuts/myfolder/ETFs.csv"
   DBMS=CSV REPLACE;
   GETNAMES=YES;
   DATAROW=2;
RUN;

PROC SQL;
   CREATE TABLE stocks AS
   SELECT *
   from Fulldata
   where Security EQ "Stock";
QUIT;

PROC SQL;
   CREATE TABLE ETF AS
   SELECT *
   from Fulldata
   where Security EQ "ETF" 
QUIT;

您可能希望尝试合并这两个数据集,并且只接受具有匹配“Ticker”值的数据集。我将假设dataset ETFnames的名称也存储在变量“Ticker”下


据我所知,这将给你期望的结果。您也可以在PROC-SQL语句中执行join而不是MERGE,但是在IMO中编写MERGE更容易。

谢谢,非常有效。我是SAS的新手,这帮了我很大的忙。
  PROC IMPORT OUT= WORK.Fulldata
            DATAFILE= "/folders/myshortcuts/myfolder/q2_2012_all.csv"
            DBMS=CSV REPLACE;
     GETNAMES=YES;
     DATAROW=2;
   RUN;

   PROC IMPORT OUT= WORK.ETFnames
            DATAFILE= "/folders/myshortcuts/myfolder/ETFs.csv"
            DBMS=CSV REPLACE;
     GETNAMES=YES;
     DATAROW=2;
   RUN;

  PROC SORT DATA=WORK.Fulldata OUT=WORK.Fulldatasort;
        BY Ticker;
  RUN;

  PROC SORT DATA=WORK.EFTnames OUT=WORK.EFTnamessort;
        BY Ticker;
  RUN;

  DATA WORK.Partdata;
        MERGE WORK.Fulldatasort WORK.EFTnamessort(in=A);
        BY Ticker;
        IF A;
  RUN;

  PROC SQL;
  CREATE TABLE stocks AS
  SELECT *
  from Partdata
  Where Security EQ "Stock";
  QUIT;

  PROC SQL;
  CREATE TABLE ETF AS
  SELECT *
  from Partdata
  Where Security EQ "ETF" 
  QUIT;