小编pyl*_*yll的帖子

SAS Proc SQL Trim不工作?

我有一个看似非常简单的问题(可能是......),但我无法让它工作.

数据集"列表"中的变量"name"的长度为20.我希望有条件地将值选择为宏变量,但通常所需的值小于指定的长度.这会在最后留下尾随空白,这是我不能拥有的,因为它们会破坏宏变量的未来调用.

我已经尝试了修剪,压缩,btrim,左(修剪和其他解决方案,但似乎没有任何东西给我我想要的东西(这是'乔'没有空白).这看起来应该比它更容易...... .. 救命.

data list;
    length id 8 name $20;
    input id name $;
cards;
1 reallylongname
2 Joe
;
run;

proc sql;
    select trim(name) into :nameselected
    from list
    where id=2;
run;

%put ....&nameselected....;
Run Code Online (Sandbox Code Playgroud)

trim sas proc-sql

4
推荐指数
2
解决办法
1429
查看次数

在Proc SQL Teradata passthrough中使用SAS宏变量

我有一个SQL语句,我希望自动使用SAS EG(9.4).以下语句已在Teradata SQL Assistant中进行了测试并正常运行.

select * from TD.DATA where date='2015-06-01'
Run Code Online (Sandbox Code Playgroud)

现在我希望通过proc SQL传递来推送它,并将日期提供给SQL程序,就像这样....

proc sql;
connect to teradata as tera(user=&tera_user password="&tera_pwd" tdpid=terap);
create table MYDATA as 
select * from connection to tera
(
select * from TD.DATA where date='2015-06-01'
);
disconnect from tera;
quit;
Run Code Online (Sandbox Code Playgroud)

上面的代码已经过测试,并产生与前一个SQL语句完全相同的输出.但是,我真正想要的是做这样的事情:

%let input_date='2015-06-01';
proc sql;
connect to teradata as tera(user=&tera_user password="&tera_pwd" tdpid=terap);
create table MYDATA as 
select * from connection to tera
(
select * from TD.DATA where date=&input_date.
);
disconnect from tera;
quit;
Run Code Online (Sandbox Code Playgroud)

我尝试过不同的报价组合和不同的日期格式....我在这里缺少什么?谢谢.

sql sas

4
推荐指数
1
解决办法
2086
查看次数

动态“跨行”相对频率

我有一个包含 n 个变量的数据集(示例中为 3 个,但有所不同),我想找到这些变量彼此之间的相对频率。它们总是被命名为相同的,前缀后跟数字序列。

have <-
  data.frame(
    x1 = sample(1:10, 20, replace = TRUE),
    x2 = sample(1:10, 20, replace = TRUE),
    x3 = sample(1:10, 20, replace = TRUE)
  )

want <-
  have |>
  mutate(
    x1_prop = x1 / (x1 + x2 + x3),
    x2_prop = x2 / (x1 + x2 + x3),
    x3_prop = x3 / (x1 + x2 + x3))
Run Code Online (Sandbox Code Playgroud)

我认为 dplyr 中的解决方案可以使用mutate(across,但无法弄清楚语法......

want <-
  have |>
  mutate(across(everything()), . / rowSums(.)) # does not work
Run Code Online (Sandbox Code Playgroud)

r dplyr

3
推荐指数
1
解决办法
58
查看次数

Proc Transpose SAS:转置和重命名变量

我有一个过程转置问题。我拥有的代码并不能完全满足我的需求。

data have;
    input name $ x y z;
cards;
jon 1 85 1300
jon 2 90 2000
jon 3 95 1800
hal 1 70 1500
hal 2 78 4000
hal 3 83 3000
;
run;

proc sort data=have;
    by name;
run;

proc transpose data=have out=want;
    by name;
run;
Run Code Online (Sandbox Code Playgroud)

我想最终得到一个如下所示的数据集:

name  y1  y2  y3  z1    z2    z3
hal   70  78  83  1500  4000  3000
jon   85  90  95  1300  2000  1800
Run Code Online (Sandbox Code Playgroud)

这里最重要的是能够为每个名字获取一行。其次是能够使用 x 变量重命名其他变量(y1、y2、y3 等)。我知道第一部分可能很简单。想法?

谢谢。

transpose rename sas

2
推荐指数
1
解决办法
7071
查看次数

在R中创建"Week_Start"变量

我有一个类似下面的数据框.

bus_date <- as.Date(c('2017-04-03', '2017-04-04', '2017-04-06', '2017-04-11', '2017-04-13', '2017-04-17'))
sales <- c(100, 110, 120, 200, 300, 100)


daily_sales <- data.frame(bus_date, sales)
Run Code Online (Sandbox Code Playgroud)

这是每日销售表.

我想创建一个名为"Week_Start"的新变量,它是工作周的日期.我已经实现了各种解决方案,允许我记录一周的数字(1-52)但我需要实际的周开始日期.

如果(bus_date是星期一)返回(bus_date),则返回(bus_date之前的星期一)

所以我的结果数据框看起来像:

Week_Start <- as.Date(c('2017-04-03', '2017-04-03', '2017-04-03', '2017-04-10', '2017-04-10', '2017-04-17'))
daily_sales2 <- data.frame(bus_date, sales, Week_Start)
Run Code Online (Sandbox Code Playgroud)

我知道可能有一种简单的方法可以做到这一点,但不确定从哪里开始.谢谢.

r date

2
推荐指数
2
解决办法
313
查看次数

根据min计算特定行

我的数据看起来像这样

df <- data.frame(x = c(3, 5, 4, 4, 3, 2),
                 y = c(.9, .8, 1, 1.2, .5, .1))
Run Code Online (Sandbox Code Playgroud)

我试图将每个x值乘以y或1,具体取决于具有最小值的x值.

df$z <- df$x * min(df$y, 1)
Run Code Online (Sandbox Code Playgroud)

问题是它取整列的最小值,因此每x乘以0.1.

相反,我需要x乘以.9,.8,1,1,.5,.1 ......

r

2
推荐指数
1
解决办法
26
查看次数

限制Proc意味着输出仅为完成行

我有一个简单的proc手段程序,我希望将输出限制为仅完成行.

   data test_dat;
        input group $ subgroup $ time variable1 variable2;
    cards;
    A xxxx 1 100 2.50
    A xxxx 2 200 2.50
    A xxxx 3 300 2.50 
    A xxxx 4 100 3.00
    A zzzz 1 500 1.00
    A zzzz 2 450 1.00
    A zzzz 3 700 1.50
    A zzzz 4 600 1.50
    B yyyy 1 200 4.00
    B yyyy 2 100 5.00
    B yyyy 3 300 4.00
    B yyyy 4 250 5.00
    ;
    run;

    proc means data=test_dat mean sum;
        class …
Run Code Online (Sandbox Code Playgroud)

sas

1
推荐指数
1
解决办法
103
查看次数

SAS宏可以打印多个报告

我有一个如下所示的数据集:

data have;
    input name $ class $ time score;
cards;
chewbacca wookie  1 97
chewbacca wookie 2 100
chewbacca wookie 3 95
saruman wizard 1 79
saruman wizard 2 85
saruman wizard 3 40
gandalf wizard 1 22
gandalf wizard 2 50
gandalf wizard 3 87
bieber canadian 1 50
bieber canadian 2 45
bieber canadian 3 10
;
run;
Run Code Online (Sandbox Code Playgroud)

我正在创建一个程序来完成两件事:1.打印每个不同类的数据2.为每个名称创建一个散点图x =时间y =得分.

执行下面的代码将说明我想要的输出:

data chewbacca saruman gandalf bieber;
    set have;
    if name='chewbacca' then output chewbacca;
    else if name='saruman' …
Run Code Online (Sandbox Code Playgroud)

macros sas

1
推荐指数
1
解决办法
473
查看次数

标签 统计

sas ×5

r ×3

date ×1

dplyr ×1

macros ×1

proc-sql ×1

rename ×1

sql ×1

transpose ×1

trim ×1