如何在proc sql中创建这个case语句并在表被覆盖时附加?

时间:2017-08-18 04:50:22

标签: sql macros sas proc-sql

我花了几个月时间进行数据挖掘并创建了一种技术来查找公司的信息。我无法将数据放入有关如何在SAS中汇总信息的适当且有价值的演示文稿中。我有3个问题。

1)我怎么说proc sql"如果matched_by_t2> b2_c2然后添加新列"没有bueno"

2)有没有办法让#34;(BC_C2 / original_count)%"我将如何插入百分号

3)如果我为数据集列表多次运行此查询,我如何获得名称相同的新表" e_data_unmatched" 每次创建和覆盖新表时附加在imgur中我显示两行,每个程序运行时,表被覆盖所以我想确保每次循环运行时新记录附加到表而不是覆盖。 1 http://imgur.com/bzLefXy

谢谢!

:host { 
    padding:10px;
    &(.headroom) {
        position: fixed;
    }
}

2 个答案:

答案 0 :(得分:1)

1) Add new column "no bueno" in sql set value based on conditiong " If matched_by_t2 > b2_c2" 
2) concatenate percentage sign
 proc sql;
create table wanted as
select t1.occurences as original_count
      ,t2.occurences as matched_by_T1
      ,t3.occurences as matched_by_T2
      ,t2.occurences+t3.occurences as B2_C2
      ,t4.occurences as not_matched
      ,t5.occurences as matched_by_t2,
case when t3.occurences> t5.occurences then 0 
else 1 end as no_bueno,
 CAST(((t2.occurences+t3.occurences)/ t1.occurences) as nvarchar(5)) +'%'
from (select count(*) as occurences from query_for_reports1) t1
    ,(select count(*) as occurences from query_for_reports1 where edsys is not null) t2
    ,(select count(*) as occurences from e_data_unmatched where ip is not null) t3
    ,(select count(*) as occurences from WORK.E_DAT_UNMATCHED where IpS= .) t4
    ,(select count(*) as occurences from work.Append_table13) t5
;
quit;

答案 1 :(得分:0)

建立您的查询并尝试回答所有三个问题:

1)如果你想要一个包含值&#34的新列;没有bueno"当条件为真时,将以下列添加到select子句中:

case 
  when matched_by_t2>t2.occurences+t3.occurences then "no bueno"
end as new_column_1

如果您想要的是名为no bueno的列中的标志类型值,您可以使用@Trushna的建议

2)有两种方法可以做到这一点。您可以将值存储为字符变量,其中包含硬编码的百分号:

catx(' ',(t2.occurences+t3.occurences)/t1.occurences,'%') as new_column_2

或者您可以将值存储为数字变量,并使用以下格式显示百分号:

(t2.occurences+t3.occurences)/t1.occurences as new_column_2 format=percent.

3)每次使用此查询将其输出添加到表中的一种方法是使用insert into查询而不是create table

proc sql;
insert into wanted
select [...]
;
quit;

请记住,insert into成功时需要存在该表。在您的情况下,您必须首次使用create table语法,然后每次都使用insert into syntax

我必须指出,虽然我不了解您的工作流程以及您正在执行此操作的上下文,但您尝试实现此目的的方式似乎非常不理想,您可能需要考虑重新考虑您的流程。