Golf me an HQ9+ Compiler Your task is "simple" should you choose to accept it. 

Write an HQ9+ compiler in a language of your choice.

HQ9+ has four commands (as you may be able to tell) H prints "Hello, World!" Q prints out the source code (this can either be the compiled source or HQ9+ source for the purpose of this challenge),9 prints out the lyrics to 99 bottles of beer on the wall, and + is essentially a noop.

Your submission should be written in some language X, and should take input of HQ9+ source and output a program in X. 

Wait, I know what you're thinking. This is not a duplicate of Creating a HQ9+ interpreter as it should not run HQ9+ code, but rather compile it. It should output a fully functional program. 

Rules


Language X should satisfy the traditional definition of a language
Standard loopholes disallowed
This is code golf (shortest program in bytes wins)
Your solution must be testable
X cannot be HQ9+ or an extension of HQ9+



Clarifications

There has been some confusion as to what the q command should do. I had originally thought that it would output the compiled code (i.e code in langauge X), but my reference implementation outputs the hq9+ code. I would like to see either one depending on your golfing preferences.
Actually, 17 bytes
&quot;HQ9&quot;∩εj'N'9(t'.j

Try it online!
This program compiles HQ9+ to Actually.
Actually is (almost) a superset of HQ9+ - the only difference is that the 9 command in HQ9+ is N in Actually. Because + is a NOP in HQ9+ (the accumulator is never actually used or displayed, and thus many implementations treat it as a NOP), it is stripped out.
Explanation:
&quot;HQ9&quot;∩εj'N'9(t'.j
&quot;HQ9&quot;∩εj           strip all characters not in &quot;HQ9&quot;, preserving order
        'N'9(t     replace all occurrences of &quot;9&quot; with &quot;N&quot;
              '.j  insert a &quot;.&quot; between every pair of characters

-1 byte from Christian Irwin