かきためぬ

書き溜めたいきもちは山々だけど

【SAS】オブザベーション数をカウントする【SQLプロシジャは使用しない】

データセットのオブザベーション(行数)をカウントするやり方


  • テストデータを作成
*変数category、valueを持つデータセット「test」を作成;
DATA test;
  INPUT category value;
  CARDS;
  2 257
  1 172
  3 169
  3 208
  2 408
  2 400
  1 315
  1 156
  3 30
  1 262
  1 484
  3 297
  ;
RUN;
  • ↓データセット「test」の中身。オブザベーション数は12

f:id:hhohh:20160907203157p:plain




  • オブザベーション数をカウント
DATA count(KEEP=cnt);/*KEEP=により、変数cntのみをデータセットに保持*/

  *データセット「test」を読み込み;
  SET test END=last; /*END=により、最後のオブザベーションを読み込んだ時の動作を設定できる*/
  
  *RETAINステートメントにより、前のオブザベーションの変数cntの値を保持する;
  RETAIN cnt 0;
  
  *1オブザベーション読み込むごとにcntに+1;
  cnt+1;
  
  *最後のオブザベーションだけデータセット「count」に出力;
  IF last;
RUN;
  • ↓データセット「count」の中身。変数cntにデータセット「test」のオブザベーション数を値に持っている

f:id:hhohh:20160907210005p:plain








変数categoryの値ごとにオブザベーション数をカウントしたい場合

*見やすくするため、SORTプロシジャを使ってcategoryでソート;
PROC SORT DATA=test;
  BY category;
RUN;

f:id:hhohh:20160907212258p:plain







  • categoryごとにオブザベーション数をカウント
DATA count(KEEP=cnt1 cnt2 cnt3);
  SET test END=last;   
  RETAIN cnt1 0 cnt2 0 cnt3 0;
  
  *categoryが1のときcnt1に+1;
  IF      category=1 THEN cnt1+1;
  
  *categoryが2のときcnt2に+1;
  ELSE IF category=2 THEN cnt2+1;
  
  *categoryが3のときcnt3に+1;
  ELSE IF category=3 THEN cnt3+1;
  
  IF last;

RUN;
  • 変数cnt1、cnt2、cnt3にそれぞれcategory1、2、3のオブザベーション数を持つ

f:id:hhohh:20160907211109p:plain

VBAで時間帯を分割

VBAで時間帯を分割したい。

「8:00~9:00」という1時間分の時間帯があったとき、
以下のように分割数を指定して分けたい。

<2分割>
8:00~8:30(30分間)
8:30~9:00(30分間)

<3分割>
8:00~8:20(20分間)
8:20~8:40(20分間)
8:40~9:00(20分間)



「8:01~9:00(59分間)」を3分割、
というように割り切れない時間帯の場合は、

59 ÷ 3 = 19 余り 2

なので、

8:01~8:21(20分間)
8:21~8:41(20分間)
8:41~9:00(19分間)

というように、余りの2分間を上の時間帯から1分ずつ振り分けたい。

以下のように開始時間と終了時間を書いた表があるとき、
カーソルが合っている時間帯を分割できるようにする。
f:id:hhohh:20150927232914p:plain
図の場合は、カーソルが合っている9:00~10:00の時間帯を分割する。

「時間を分割」ボタンを押したら、分割数を指定する画面を出す。
f:id:hhohh:20150927233521p:plain


2~10分割から選べるように、
リストボックスのデータを設定する。

Private Sub UserForm_Initialize()
    With ComboBox1
        'リストボックスに項目を追加
        .AddItem "2"
        .AddItem "3"
        .AddItem "4"
        .AddItem "5"
        .AddItem "6"
        .AddItem "7"
        .AddItem "8"
        .AddItem "9"
        .AddItem "10"
        'デフォルト値を"2"に設定
        .Text = ComboBox1.List(0)
        
        'リストボックスに直接入力させない
        .Style = fmStyleDropDownList
    End With
End Sub

AddItemでリストボックスにデータを追加できる。


「キャンセル」ボタンを押したら分割数指定画面を閉じる。

Private Sub CancelButton_Click()
    'ユーザーフォームを閉じる
    Unload Me
End Sub


「分割する」ボタンで分割を実行。

Private Sub ExecuteButton_Click()
    Dim i As Integer
    Dim index As Integer    'リストボックスで選択した位置
    Dim dNum As Integer   '分割数
    Dim Gyou As Long    'カーソル位置のセルの行番号
    Dim sTime As Date   '開始時間
    Dim eTime As Date   '終了時間
    Dim dTime As Date   '分割時間
    Dim oTime As Variant '割り切れない半端な時間
    
    index = UserForm1.ComboBox1.ListIndex
    'リストボックスで選択した分割数
    dNum = UserForm1.ComboBox1.List(index)
    'カーソル位置のセルの行番号
    Gyou = ActiveCell.Row
    
    '開始時間
    sTime = TimeSerial(Range("B" & Gyou), Range("C" & Gyou), "00")
    '終了時間
    eTime = TimeSerial(Range("D" & Gyou), Range("E" & Gyou), "00")
    '分割時間
    dTime = TimeSerial("00", (DateDiff("n", sTime, eTime) \ dNum), "00")
    '割り切れない半端な時間
    oTime = DateDiff("n", sTime, eTime) Mod dNum
    
    'カーソル位置の下にdNum - 1行分、新しい行を挿入
    Range("B" & Gyou + 1).Resize(dNum - 1).EntireRow.Insert
    '終了時間の値をdNum - 1 行下に入れる
    Range("D" & Gyou + dNum - 1).Value = Range("D" & Gyou).Value
    Range("E" & Gyou + dNum - 1).Value = Range("E" & Gyou).Value
    
    For i = 0 To dNum - 2
        sTime = TimeSerial(Range("B" & Gyou + i), Range("C" & Gyou + i), "00") + dTime
        '終了時間にsTime + dTimeを入れる
        Range("D" & Gyou + i).Value = Hour(sTime)
        Range("E" & Gyou + i).Value = Minute(sTime)
    
        '割り切れない半端な時間が存在するとき、終了時間に1分足す
        If oTime > 0 Then
            Range("E" & Gyou + i).Value = Range("E" & Gyou + i).Value + 1
            '終了時間(分)が60のとき値を0にして、終了時間(時)に1を足す
            If Range("E" & Gyou + i).Value = 60 Then
                Range("E" & Gyou + i).Value = 0
                Range("D" & Gyou + i).Value = Range("D" & Gyou).Value + 1
            End If
        oTime = oTime - 1
        End If
    
        '開始時間(時) > 終了時間(時)のとき、終了時間(時)に24を足す(24時以降の深夜時間を分割するとき)
        If Range("B" & Gyou + i).Value > Range("D" & Gyou + i).Value Then
            Range("D" & Gyou + i).Value = Range("D" & Gyou + i).Value + 24
        End If
    
        '終了時間の値を1行下の開始時間に入れる
        Range("B" & Gyou + i + 1).Value = Range("D" & Gyou + i).Value
        Range("C" & Gyou + i + 1).Value = Range("E" & Gyou + i).Value
    Next
    
    'ユーザーフォームを閉じる
    Unload Me
End Sub

例えば9:00~10:00の時間帯を7分割してみると、
f:id:hhohh:20150928001513p:plain


9分間の時間帯が4つと、
8分間の時間帯が3つに分割されるようになる。
f:id:hhohh:20150928002121p:plain

WordPressの記事をはてなブログにも自動投稿

  • 今までのはてなブログの記事をWordPressにインポート
  • WordPressに記事を投稿したら、はてなブログにも自動投稿

の設定がやっと終わりました。


 

IFTTTを使ってはてなブログ自動投稿を設定

  • IFTTTでレシピ作成

[My Recipes] > [Create a Recipe]

IFTTT_001

[this] を選択

 

IFTTT_002

[feed] を選択

 

IFTTT_003

[New feed item] を選択

 

IFTTT_004

自分のWordPressの [Feed URL] を入力して [Create Trigger] を選択

 

IFTTT_005

 

[that] を選択

 

IFTTT_006

[Gmail] を選択

 

IFTTT_007

[Send an email] を選択

 

IFTTT_008

[To address] に自分のはてなブログの投稿メールアドレスを入力

[Subject] はデフォルトのまま

[Body] は、

「EntryContent(記事本文)」 「FeedTitle(フィードのタイトル)」 「EntryUrl(WordPressでの記事のURL)」

という感じ。

(FeedTitleはいらないと思って自分は消しました)

[Attachment URL]は空欄

以上を入力して [Create Action] を選択

 

IFTTT_009

[Create Recipe] を選択で設定完了

 

IFTTT_010

このレシピによって、WordPressに記事を投稿したら、Gmailからはてなブログへも記事が投稿されるようになりました。

 

 

 

 

http://ift.tt/1a2zcbr

クイック アクセス ツール バー

以前、Excelの「クイックアクセスツールバー」の設定方法を教えてもらって、それがなかなかに便利で恩恵を受ける機会が多いです。 

f:id:hhohh:20150401231931p:plain

 行の挿入や削除、中央揃えせずにセル結合、などが、それぞれのボタンをポチッと押すだけで出来てしまう。

 

設定方法は、 

 [クイック アクセス ツール バーのユーザー設定] > [その他のコマンド(M)] 

f:id:hhohh:20150330233153p:plain

 

[Excelのオプション]で好きなものを追加して、[OK]

f:id:hhohh:20150330233853p:plain

 さらに「クイック アクセス ツール バーをリボンの下に表示する」という設定にしておくとボタンに手が届きやすくなってなおのこと使い勝手がいいです。

 --

本日、いよいよ社会人2年目に突入しました。

元気にがんばりたいです。

llのオプション[-tr]

ll(ls -l)すると

ファイル名でソートされるけど、

f:id:hhohh:20150330001409p:plain

 

 

オプション -t つけたら

f:id:hhohh:20150330001753p:plain

タイムスタンプ新しい順になって、

 

さらに

-r (逆順にソート)つけたら

f:id:hhohh:20150330002040p:plain

タイムスタンプ古い順になってくれるので、

 

ディレクトリの中にファイルがたくさんあっても、

更新した最新ファイルは一番下に表示されてすぐ見つけられる

 

っていうの教えて頂いたのが、最近のぷち感動でした。